[INFO] cloning repository https://github.com/r/morph
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/r/morph" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fr%2Fmorph", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fr%2Fmorph'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 2d7486815e1e83fd04774fecd5ec658bc284325e
[INFO] testing r/morph against master#cced03bfd61a304243a34504618ecec86c17063f for pr-154065-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fr%2Fmorph" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/r/morph
[INFO] finished tweaking git repo https://github.com/r/morph
[INFO] tweaked toml for git repo https://github.com/r/morph written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/r/morph on toolchain cced03bfd61a304243a34504618ecec86c17063f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/r/morph already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded lazy-regex-proc_macros v3.6.0
[INFO] [stderr]   Downloaded smart-default v0.7.1
[INFO] [stderr]   Downloaded lazy-regex v3.6.0
[INFO] [stderr]   Downloaded sealed v0.5.0
[INFO] [stderr]   Downloaded cucumber v0.21.1
[INFO] [stderr]   Downloaded peg-runtime v0.6.3
[INFO] [stderr]   Downloaded peg v0.6.3
[INFO] [stderr]   Downloaded synthez-codegen v0.3.1
[INFO] [stderr]   Downloaded terminal_size v0.4.3
[INFO] [stderr]   Downloaded typed-builder-macro v0.15.2
[INFO] [stderr]   Downloaded drain_filter_polyfill v0.1.3
[INFO] [stderr]   Downloaded clap_lex v1.0.0
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.109
[INFO] [stderr]   Downloaded rand_xorshift v0.4.0
[INFO] [stderr]   Downloaded synthez v0.3.1
[INFO] [stderr]   Downloaded nom_locate v4.2.0
[INFO] [stderr]   Downloaded bytecount v0.6.9
[INFO] [stderr]   Downloaded rmcp-macros v0.16.0
[INFO] [stderr]   Downloaded schemars_derive v1.2.1
[INFO] [stderr]   Downloaded cucumber-expressions v0.3.0
[INFO] [stderr]   Downloaded synthez-core v0.3.1
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.109
[INFO] [stderr]   Downloaded rusty-fork v0.3.1
[INFO] [stderr]   Downloaded gherkin v0.14.0
[INFO] [stderr]   Downloaded typed-builder v0.15.2
[INFO] [stderr]   Downloaded peg-macros v0.6.3
[INFO] [stderr]   Downloaded assert_cmd v2.1.2
[INFO] [stderr]   Downloaded cucumber-codegen v0.21.1
[INFO] [stderr]   Downloaded clap v4.5.60
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.109
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.109
[INFO] [stderr]   Downloaded js-sys v0.3.86
[INFO] [stderr]   Downloaded clap_builder v4.5.60
[INFO] [stderr]   Downloaded proptest v1.10.0
[INFO] [stderr]   Downloaded rmcp v0.16.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 4d0fd19a2d9dce5f670b9f48a3c6d71e0fdba3190564b3842fe6529418f4ec9f
[INFO] running `Command { std: "docker" "start" "-a" "4d0fd19a2d9dce5f670b9f48a3c6d71e0fdba3190564b3842fe6529418f4ec9f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4d0fd19a2d9dce5f670b9f48a3c6d71e0fdba3190564b3842fe6529418f4ec9f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4d0fd19a2d9dce5f670b9f48a3c6d71e0fdba3190564b3842fe6529418f4ec9f", kill_on_drop: false }`
[INFO] [stdout] 4d0fd19a2d9dce5f670b9f48a3c6d71e0fdba3190564b3842fe6529418f4ec9f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 371d21e820c6342a72e01dde96c23f0c49fedc8cba89ed9d6c90d425c2c35cbe
[INFO] running `Command { std: "docker" "start" "-a" "371d21e820c6342a72e01dde96c23f0c49fedc8cba89ed9d6c90d425c2c35cbe", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling regex-syntax v0.8.9
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling linux-raw-sys v0.11.0
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling vte v0.14.1
[INFO] [stderr]    Compiling ref-cast v1.0.25
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling rmcp v0.16.0
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling strip-ansi-escapes v0.2.1
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling dyn-clone v1.0.20
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling pastey v0.2.1
[INFO] [stderr]    Compiling morph-mcp v0.48.3 (/opt/rustwide/workdir/morph-mcp)
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling socket2 v0.6.2
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling uuid v1.23.1
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling morph-e2e v0.48.3 (/opt/rustwide/workdir/morph-e2e)
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling serde_derive_internals v0.29.1
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling ref-cast-impl v1.0.25
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling schemars_derive v1.2.1
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling rmcp-macros v0.16.0
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling schemars v1.2.1
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling morph-core v0.48.3 (/opt/rustwide/workdir/morph-core)
[INFO] [stderr]    Compiling morph-cli v0.48.3 (/opt/rustwide/workdir/morph-cli)
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.8.8
[INFO] [stderr]    Compiling morph-serve v0.48.3 (/opt/rustwide/workdir/morph-serve)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 20s
[INFO] running `Command { std: "docker" "inspect" "371d21e820c6342a72e01dde96c23f0c49fedc8cba89ed9d6c90d425c2c35cbe", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "371d21e820c6342a72e01dde96c23f0c49fedc8cba89ed9d6c90d425c2c35cbe", kill_on_drop: false }`
[INFO] [stdout] 371d21e820c6342a72e01dde96c23f0c49fedc8cba89ed9d6c90d425c2c35cbe
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 26c4cdd044a0f687bd402cae797eb82cfbab5de240437400b91bc829d8e679fc
[INFO] running `Command { std: "docker" "start" "-a" "26c4cdd044a0f687bd402cae797eb82cfbab5de240437400b91bc829d8e679fc", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling regex-syntax v0.8.9
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling assert_cmd v2.1.2
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling bytecount v0.6.9
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling regex-syntax v0.7.5
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling sealed v0.5.0
[INFO] [stderr]    Compiling peg-runtime v0.6.3
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling morph-cli v0.48.3 (/opt/rustwide/workdir/morph-cli)
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling typed-builder-macro v0.15.2
[INFO] [stderr]    Compiling unicode-linebreak v0.1.5
[INFO] [stderr]    Compiling synthez-core v0.3.1
[INFO] [stderr]    Compiling smawk v0.3.2
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling vte v0.14.1
[INFO] [stderr]    Compiling predicates v3.1.4
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling strip-ansi-escapes v0.2.1
[INFO] [stderr]    Compiling float-cmp v0.9.0
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling synthez-codegen v0.3.1
[INFO] [stderr]    Compiling peg-macros v0.6.3
[INFO] [stderr]    Compiling synthez v0.3.1
[INFO] [stderr]    Compiling typed-builder v0.15.2
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling terminal_size v0.4.3
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling gherkin v0.14.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling peg v0.6.3
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling smart-default v0.7.1
[INFO] [stderr]    Compiling humantime v2.3.0
[INFO] [stderr]    Compiling inventory v0.3.22
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling nom_locate v4.2.0
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling drain_filter_polyfill v0.1.3
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling schemars v1.2.1
[INFO] [stderr]    Compiling rmcp-macros v0.16.0
[INFO] [stderr]    Compiling morph-e2e v0.48.3 (/opt/rustwide/workdir/morph-e2e)
[INFO] [stderr]    Compiling morph-mcp v0.48.3 (/opt/rustwide/workdir/morph-mcp)
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling axum v0.8.8
[INFO] [stderr]    Compiling rmcp v0.16.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling cucumber-expressions v0.3.0
[INFO] [stderr]    Compiling predicates v2.1.5
[INFO] [stderr]    Compiling lazy-regex-proc_macros v3.6.0
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling proptest v1.10.0
[INFO] [stderr]    Compiling cucumber-codegen v0.21.1
[INFO] [stderr]    Compiling lazy-regex v3.6.0
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling morph-core v0.48.3 (/opt/rustwide/workdir/morph-core)
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling cucumber v0.21.1
[INFO] [stderr]    Compiling morph-serve v0.48.3 (/opt/rustwide/workdir/morph-serve)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 48s
[INFO] running `Command { std: "docker" "inspect" "26c4cdd044a0f687bd402cae797eb82cfbab5de240437400b91bc829d8e679fc", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "26c4cdd044a0f687bd402cae797eb82cfbab5de240437400b91bc829d8e679fc", kill_on_drop: false }`
[INFO] [stdout] 26c4cdd044a0f687bd402cae797eb82cfbab5de240437400b91bc829d8e679fc
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 81b2bde240f0f11a5484ffd5bf7b2f3ef3769deb3132feb0085d3c41b32664a7
[INFO] running `Command { std: "docker" "start" "-a" "81b2bde240f0f11a5484ffd5bf7b2f3ef3769deb3132feb0085d3c41b32664a7", kill_on_drop: false }`
[INFO] [stderr]    Compiling morph-cli v0.48.3 (/opt/rustwide/workdir/morph-cli)
[INFO] [stderr]    Compiling morph-mcp v0.48.3 (/opt/rustwide/workdir/morph-mcp)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 18.19s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/morph-772d76b00accbc97)
[INFO] [stdout] 
[INFO] [stdout] running 41 tests
[INFO] [stdout] test setup::tests::aoe_skip_agents_only_writes_glue ... ok
[INFO] [stdout] test setup::tests::aoe_requires_morph_init ... ok
[INFO] [stdout] test setup::tests::claude_code_requires_morph_init ... ok
[INFO] [stdout] test setup::tests::aoe_unknown_agent_errors ... ok
[INFO] [stdout] test setup::tests::claude_code_hook_scripts_written_and_executable ... ok
[INFO] [stdout] test setup::tests::claude_code_settings_json_merge_preserves_existing ... ok
[INFO] [stdout] test setup::tests::claude_code_hooks_registered_for_userpromptsubmit_and_stop ... ok
[INFO] [stdout] test setup::tests::hooks_json_created ... ok
[INFO] [stdout] test setup::tests::aoe_no_bind_mount_omits_morph_volume_entries ... ok
[INFO] [stdout] test setup::tests::claude_code_idempotent ... ok
[INFO] [stdout] test setup::tests::mcp_json_created ... ok
[INFO] [stdout] test setup::tests::idempotent ... ok
[INFO] [stdout] test setup::tests::mcp_json_merged_preserves_existing ... ok
[INFO] [stdout] test setup::tests::aoe_writes_config_dockerfile_and_agents_md ... ok
[INFO] [stdout] test setup::tests::hook_scripts_executable ... ok
[INFO] [stdout] test setup::tests::opencode_agents_md_appended_to_existing ... ok
[INFO] [stdout] test setup::tests::hooks_json_merged_preserves_existing ... ok
[INFO] [stdout] test setup::tests::opencode_agents_md_created ... ok
[INFO] [stdout] test setup::tests::requires_morph_init ... ok
[INFO] [stdout] test setup::tests::aoe_default_delegates_to_all_three_agents ... ok
[INFO] [stdout] test setup::tests::resolve_mcp_command_honours_env_override ... ok
[INFO] [stdout] test setup::tests::aoe_preserves_existing_user_config ... ok
[INFO] [stdout] test tests::default_clone_dest_handles_ipv6_ssh_url ... ok
[INFO] [stdout] test tests::default_clone_dest_strips_morph_suffix ... ok
[INFO] [stdout] test tests::short_hash_str_truncates_to_eight_chars ... ok
[INFO] [stdout] test tests::version_json_has_stable_field_set ... ok
[INFO] [stdout] test setup::tests::resolve_mcp_command_ignores_env_when_path_does_not_exist ... ok
[INFO] [stdout] test setup::tests::opencode_json_merged_preserves_existing ... ok
[INFO] [stdout] test setup::tests::claude_code_settings_json_created ... ok
[INFO] [stdout] test setup::tests::opencode_instructions_includes_agents_md ... ok
[INFO] [stdout] test setup::tests::opencode_agents_md_not_duplicated ... ok
[INFO] [stdout] test setup::tests::opencode_json_created ... ok
[INFO] [stdout] test setup::tests::aoe_idempotent ... ok
[INFO] [stdout] test setup::tests::opencode_idempotent ... ok
[INFO] [stdout] test setup::tests::rules_installed ... ok
[INFO] [stdout] test setup::tests::opencode_requires_morph_init ... ok
[INFO] [stdout] test setup::tests::opencode_plugin_written ... ok
[INFO] [stdout] test setup::tests::hook_scripts_written ... ok
[INFO] [stdout] test setup::tests::aoe_config_toml_has_lifecycle_hooks ... ok
[INFO] [stdout] test setup::tests::aoe_config_toml_seeds_sandbox_env_and_volumes ... ok
[INFO] [stdout] test setup::tests::aoe_re_run_does_not_duplicate_morph_entries_with_user_config ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/remote_helper_integration.rs (/opt/rustwide/target/debug/deps/remote_helper_integration-1a18a586a45bda8f)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test remote_helper_exits_cleanly_on_eof ... ok
[INFO] [stdout] test remote_helper_responds_to_hello ... ok
[INFO] [stdout] test remote_helper_unknown_op_is_an_error_response ... ok
[INFO] [stdout] test remote_helper_put_object_returns_hash ... ok
[INFO] [stdout] test remote_helper_rejects_missing_repo_root ... ok
[INFO] [stdout] test remote_helper_has_and_get_object ... ok
[INFO] [stdout] test remote_helper_lists_branches ... ok
[INFO] [stdout] test remote_helper_ref_read_returns_hash_or_null ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/spec_tests.rs (/opt/rustwide/target/debug/deps/spec_tests-9d233d762566a89a)
[INFO] [stdout] 
[INFO] [stdout] running 432 tests
[INFO] [stdout] test spec_add_stages_any_file ... ok
[INFO] [stdout] test spec_add_dot_stages_all_working_dir_files ... ok
[INFO] [stdout] test spec_branch_no_commit_fails ... ok
[INFO] [stdout] test spec_annotations_json_lists_annotations ... ok
[INFO] [stdout] test spec_annotate_and_annotations ... ok
[INFO] [stdout] test spec_certify_accepts_branch_name ... ok
[INFO] [stdout] test spec_branch_create ... ok
[INFO] [stdout] test spec_branch_list_includes_slash_separated_names ... ok
[INFO] [stdout] test spec_certify_accepts_inline_metrics_flag ... ok
[INFO] [stdout] test spec_annotations_accepts_branch_name ... ok
[INFO] [stdout] test spec_branch_create_already_exists ... ok
[INFO] [stdout] test spec_annotate_accepts_HEAD ... ok
[INFO] [stdout] test spec_annotate_invalid_target_fails ... ok
[INFO] [stdout] test spec_branch_set_upstream_persists_in_config ... ok
[INFO] [stdout] test spec_certify_fails_below_threshold ... ok
[INFO] [stdout] test spec_certify_fails_missing_required_metric ... ok
[INFO] [stdout] test spec_certify_inline_metrics_and_metrics_file_are_mutually_exclusive ... ok
[INFO] [stdout] test spec_branch_set_upstream_errors_without_slash ... ok
[INFO] [stdout] test spec_branch_list_shows_current ... ok
[INFO] [stdout] test spec_certify_with_runner ... ok
[INFO] [stdout] test spec_certify_current_commit_with_metrics_file ... ok
[INFO] [stdout] .morph/annotations/e6bafbad19bdb59d0a43831f980374d185bc1b585553893d095190571b31394e.json
[INFO] [stdout] test spec_branch_json_lists_branches ... ok
[INFO] [stdout] test spec_certify_resolves_12char_prefix ... ok
[INFO] [stdout] 1
[INFO] [stdout] test spec_checkout_no_commits_fails ... ok
[INFO] [stdout] test spec_certify_specific_commit ... ok
[INFO] [stdout] test spec_checkout_detached ... ok
[INFO] [stdout] test spec_certify_populates_annotations_index ... ok
[INFO] [stdout] test spec_checkout_nonexistent_fails ... ok
[INFO] [stdout] test spec_ci_json_output_gate ... ok
[INFO] [stdout] test spec_ci_json_output_certify ... ok
[INFO] [stdout] test spec_commit_allow_empty_metrics_bypasses_policy ... ok
[INFO] [stdout] test spec_clone_bare_creates_server_layout_without_working_tree ... ok
[INFO] [stdout] test spec_clone_refuses_existing_non_empty_destination ... ok
[INFO] [stdout] test spec_checkout_branch ... ok
[INFO] [stdout] test spec_commit_auto_detects_new_cases_added_to_default_suite ... ok
[INFO] [stdout] test spec_commit_and_log ... ok
[INFO] [stdout] test spec_commit_auto_new_cases_empty_flag_disables_diff ... ok
[INFO] [stdout] test spec_clone_with_explicit_branch_checks_out_that_branch ... ok
[INFO] [stdout] test spec_clone_into_empty_directory_creates_working_repo ... ok
[INFO] [stdout] test spec_clone_configures_default_branch_upstream ... ok
[INFO] [stdout] test spec_commit_auto_new_cases_no_op_when_suite_unchanged ... ok
[INFO] [stdout] test spec_commit_auto_run_picks_up_metrics_and_evidence_when_breadcrumb_current ... ok
[INFO] [stdout] test spec_certify_resolves_short_prefix_with_many_objects ... ok
[INFO] [stdout] test spec_commit_blocks_when_required_metrics_missing ... ok
[INFO] [stdout] test spec_commit_auto_run_explicit_metrics_override_breadcrumb_metrics ... ok
[INFO] [stdout] test spec_commit_auto_run_can_be_disabled_with_no_auto_run_flag ... ok
[INFO] [stdout] test spec_checkout_restores_tree ... ok
[INFO] [stdout] test spec_commit_auto_run_clears_breadcrumb_after_success ... ok
[INFO] [stdout] test spec_commit_carries_agent_instance_id ... ok
[INFO] [stdout] test spec_commit_auto_new_cases_explicit_flag_wins_over_diff ... ok
[INFO] [stdout] test spec_commit_from_recorded_session_persists_evidence ... ok
[INFO] [stdout] test spec_commit_from_recorded_run_persists_env_and_contributors ... ok
[INFO] [stdout] test spec_commit_explicit_author_overrides_config ... ok
[INFO] [stdout] test spec_commit_empty_message_still_works ... ok
[INFO] [stdout] test spec_commit_from_missing_run_fails ... ok
[INFO] [stdout] test spec_commit_auto_run_ignores_breadcrumb_when_head_changed ... ok
[INFO] [stdout] test spec_commit_from_run_propagates_metrics_into_observed_metrics ... ok
[INFO] [stdout] test spec_commit_from_run_explicit_metrics_override_run_metrics ... ok
[INFO] [stdout] test spec_commit_no_test_skips_configured_command ... ok
[INFO] [stdout] test spec_commit_from_run_with_empty_metrics_run_warns_and_leaves_commit_empty ... ok
[INFO] [stdout] test spec_commit_json_output ... ok
[INFO] [stdout] test spec_commit_no_staged_files ... ok
[INFO] [stdout] test spec_commit_prints_summary ... ok
[INFO] [stdout] test spec_config_get_unset_commit_test_command_exits_one ... ok
[INFO] [stdout] test spec_config_explicit_get_form ... ok
[INFO] [stdout] test spec_config_get_unset_key_exits_one ... ok
[INFO] [stdout] test spec_commit_no_warning_when_metrics_provided ... ok
[INFO] [stdout] test spec_commit_rerun_forces_fresh_test_even_when_breadcrumb_exists ... ok
[INFO] [stdout] test spec_commit_passes_when_required_metrics_present ... ok
[INFO] [stdout] test spec_config_set_and_get_user_email ... ok
[INFO] [stdout] test spec_commit_inherits_default_eval_suite_from_policy ... ok
[INFO] [stdout] test spec_commit_uses_user_name_and_email_from_config ... ok
[INFO] [stdout] test spec_config_set_then_get_commit_test_command ... ok
[INFO] [stdout] test spec_config_set_and_get_user_name ... ok
[INFO] [stdout] test spec_config_set_overwrites_previous_value ... ok
[INFO] [stdout] test spec_commit_uses_breadcrumb_when_fresh_and_no_rerun ... ok
[INFO] [stdout] test spec_config_unsupported_key_errors ... ok
[INFO] [stdout] test spec_commit_uses_user_name_from_config ... ok
[INFO] [stdout] test spec_commit_project_files_only ... ok
[INFO] [stdout] test spec_eval_from_output_auto_detects_cargo ... ok
[INFO] [stdout] test spec_commit_warns_when_metrics_empty ... ok
[INFO] [stdout] test spec_eval_add_ingests_yaml_spec ... ok
[INFO] [stdout] test spec_eval_add_yaml_creates_default_suite ... ok
[INFO] [stdout] test spec_eval_add_no_set_default_keeps_policy_unchanged ... ok
[INFO] [stdout] test spec_commit_runs_configured_test_command_when_set ... ok
[INFO] [stdout] test spec_eval_from_output_pytest ... ok
[INFO] [stdout] test spec_eval_from_output_cargo ... ok
[INFO] [stdout] test spec_eval_from_output_jest ... ok
[INFO] [stdout] test spec_diff_no_changes_empty_output ... ok
[INFO] [stdout] test spec_eval_add_extends_existing_default_suite ... ok
[INFO] [stdout] test spec_eval_gaps_reports_git_morph_drift_when_behind ... ok
[INFO] [stdout] test spec_error_when_ref_unknown ... ok
[INFO] [stdout] test spec_config_user_keys_coexist_with_remotes_block ... ok
[INFO] [stdout] test spec_diff_shows_modified_files ... ok
[INFO] [stdout] test spec_diff_json_summarizes_changes ... ok
[INFO] [stdout] test spec_eval_from_output_record_creates_run_linked_to_head ... ok
[INFO] [stdout] test spec_diff_head_shorthand ... ok
[INFO] [stdout] test spec_diff_shows_added_files ... ok
[INFO] [stdout] test spec_eval_rebuild_replaces_default_suite ... ok
[INFO] [stdout] test spec_eval_gaps_reports_stale_certifications_in_standalone_mode ... ok
[INFO] [stdout] test spec_eval_rebuild_walks_directory ... ok
[INFO] [stdout] test spec_eval_show_json ... ok
[INFO] [stdout] test spec_eval_gaps_succeeds_after_certifications ... ok
[INFO] [stdout] test spec_eval_gaps_clears_drift_after_reference_sync ... ok
[INFO] [stdout] test spec_extract_pipeline_from_recorded_run_with_reviewer ... ok
[INFO] [stdout] test spec_extract_pipeline_from_missing_run_fails ... ok
[INFO] [stdout] test spec_extract_pipeline_from_recorded_session ... ok
[INFO] [stdout] test spec_eval_run_warns_when_runner_produces_no_metrics ... ok
[INFO] [stdout] test spec_eval_run_records_hash_from_printf_cargo_output ... ok
[INFO] [stdout] test spec_files_empty_when_no_files ... ok
[INFO] [stdout] Rewrote 1 commit(s) (1 annotated as 'rewritten').
[INFO] [stdout] test spec_files_shows_nested_working_dir_files ... ok
[INFO] [stdout] test spec_eval_gaps_reports_stale_certifications_after_amend ... ok
[INFO] [stdout] Rewrote 1 commit(s) (1 annotated as 'rewritten').
[INFO] [stdout] test spec_files_shows_working_dir_files ... ok
[INFO] [stdout] test spec_eval_show_lists_default_suite_cases ... ok
[INFO] [stdout] test spec_forget_run_with_yes_writes_tombstone_and_removes_object ... ok
[INFO] [stdout] test spec_fresh_init_is_already_at_latest_so_upgrade_is_noop ... ok
[INFO] [stdout] test spec_eval_gaps_clears_empty_head_metrics_after_certify ... ok
[INFO] [stdout] test spec_forget_refuses_commit_kind ... ok
[INFO] [stdout] test spec_gaps_fail_on_gap_returns_nonzero ... ok
[INFO] [stdout] test spec_drift_clears_after_reference_sync_walks_back_to_last_mirrored ... ok
[INFO] [stdout] test spec_gaps_reports_empty_default_suite_for_fresh_repo ... ok
[INFO] [stdout] test spec_forget_dry_run_does_not_mutate ... ok
[INFO] [stdout] test spec_extracted_pipeline_is_reusable_in_commit ... ok
[INFO] [stdout] test spec_forget_refuses_non_interactive_without_yes ... ok
[INFO] [stdout] test spec_every_type_index_dir_materializes_on_first_use ... ok
[INFO] [stdout] test spec_eval_gaps_stale_certifications_persist_after_successor_certify ... ok
[INFO] [stdout] test spec_gc_empty_repo_reports_nothing_to_clean ... ok
[INFO] [stdout] test spec_fetch_creates_remote_tracking_ref ... ok
[INFO] [stdout] test spec_gate_accepts_HEAD_explicitly ... ok
[INFO] [stdout] test spec_help_top_level_shows_all_group_headings ... ok
[INFO] [stdout] test spec_help_essential_group_lists_day_one_commands ... ok
[INFO] [stdout] test spec_forget_removes_object_from_store ... ok
[INFO] [stdout] test spec_head_no_commits_errors ... ok
[INFO] [stdout] test spec_gate_fails_when_metrics_missing ... ok
[INFO] [stdout] test spec_head_json_no_commits_errors ... ok
[INFO] [stdout] test spec_gaps_clears_after_suite_and_metrics_recorded ... ok
[INFO] [stdout] test spec_gate_passes_for_certified_commit ... ok
[INFO] [stdout] test spec_head_human_shows_short_hash_branch_message ... ok
[INFO] [stdout] test spec_gate_fails_below_threshold ... ok
[INFO] [stdout] test spec_head_json_reflects_certified_metrics_after_late_certify ... ok
[INFO] [stdout] test spec_head_json_emits_structured_envelope ... ok
[INFO] [stdout] test spec_gc_handles_orphan_blob ... ok
[INFO] [stdout] test spec_hook_command_unknown_event_errors_clearly ... ok
[INFO] [stdout] test spec_forget_refuses_referenced_run_without_force ... ok
[INFO] [stdout] test spec_help_does_not_leak_hidden_commands ... ok
[INFO] [stdout] test spec_init_bare_writes_repo_version_at_latest ... ok
[INFO] [stdout] test spec_init_does_not_create_top_level_dirs ... ok
[INFO] [stdout] test spec_init_bare_at_root ... ok
[INFO] [stdout] test spec_gc_after_committed_work_keeps_reachable_objects ... ok
[INFO] [stdout] test spec_init_bare_prints_strict_policy ... ok
[INFO] [stdout] test spec_init_bare_in_git_dir_no_exclude_change ... ok
[INFO] [stdout] test spec_init_outside_git_no_tty_defaults_to_refuse ... ok
[INFO] [stdout] test spec_identify_resolves_HEAD ... ok
[INFO] [stdout] test spec_init_at_latest_does_not_warn_about_upgrade_in_status ... ok
[INFO] [stdout] test spec_init_creates_morph_dir ... ok
[INFO] [stdout] test spec_init_outside_git_with_no_git_init_errors ... ok
[INFO] [stdout] test spec_identify_resolves_short_prefix ... ok
[INFO] [stdout] test spec_init_bare_already_initialized ... ok
[INFO] [stdout] test spec_identify_json_returns_envelope ... ok
[INFO] [stdout] test spec_hook_command_post_merge_mirrors_head ... ok
[INFO] [stdout] test spec_init_already_initialized ... ok
[INFO] [stdout] test spec_init_reference_mode_prints_relaxed_policy ... ok
[INFO] [stdout] test spec_init_shows_absolute_path ... ok
[INFO] [stdout] test spec_init_writes_repo_version_at_latest ... ok
[INFO] [stdout] test spec_init_reference_solo_writes_submode_solo_to_config ... ok
[INFO] [stdout] test spec_identify_resolves_branch_name ... ok
[INFO] [stdout] test spec_identify_unknown_errors ... ok
[INFO] [stdout] test spec_init_in_git_dir_exclude_entry_is_idempotent ... ok
[INFO] [stdout] test spec_inspect_help_lists_grouped_subcommands ... ok
[INFO] [stdout] test spec_inspect_artifact_for_run ... ok
[INFO] [stdout] test spec_inspect_diagnose_single_run ... ok
[INFO] [stdout] test spec_init_outside_git_with_git_init_runs_git_init ... ok
[INFO] [stdout] test spec_init_reference_info_exclude_idempotent_when_already_present ... ok
[INFO] [stdout] test spec_init_prints_message ... ok
[INFO] [stdout] test spec_inspect_diagnose_all_default ... ok
[INFO] [stdout] test spec_inspect_export_prompt_only ... ok
[INFO] [stdout] test spec_inspect_recent_lists_traces_newest_first ... ok
[INFO] [stdout] test spec_inspect_semantics_for_run ... ok
[INFO] [stdout] test spec_init_reference_human_output_describes_stowaway_contract ... ok
[INFO] [stdout] test spec_init_reference_writes_morph_to_git_info_exclude ... ok
[INFO] [stdout] test spec_init_in_git_dir_writes_morph_to_info_exclude ... ok
[INFO] [stdout] test spec_inspect_summary_empty_repo ... ok
[INFO] [stdout] test spec_hook_command_post_commit_mirrors_head ... ok
[INFO] [stdout] test spec_init_then_cli_sane ... ok
[INFO] [stdout] test spec_inspect_recent_with_limit ... ok
[INFO] [stdout] test spec_inspect_show_all_iterates_runs ... ok
[INFO] [stdout] test spec_inspect_show_run_hash_prints_extracted_task ... ok
[INFO] [stdout] test spec_init_reference_default_writes_submode_stowaway_to_config ... ok
[INFO] [stdout] test spec_init_then_commit_uses_fanout_object_layout ... ok
[INFO] [stdout] test spec_inspect_target_context_for_run ... ok
[INFO] [stdout] test spec_inspect_show_trace_hash_prints_events ... ok
[INFO] [stdout] test spec_install_hooks_idempotent_for_trio ... ok
[INFO] [stdout] test spec_inspect_summary_json ... ok
[INFO] [stdout] test spec_inspect_summary_with_runs ... ok
[INFO] [stdout] test spec_inspect_verification_for_run ... ok
[INFO] [stdout] test spec_install_hooks_idempotent ... ok
[INFO] [stdout] test spec_inspect_task_structure_for_run ... ok
[INFO] [stdout] test spec_log_no_commits ... ok
[INFO] [stdout] test spec_install_hooks_writes_post_commit_in_reference_mode ... ok
[INFO] [stdout] test spec_install_hooks_writes_morph_to_git_info_exclude_when_missing ... ok
[INFO] [stdout] test spec_install_hooks_writes_post_merge_hook_in_reference_mode ... ok
[INFO] [stdout] test spec_install_hooks_solo_installs_pre_merge_commit ... ok
[INFO] [stdout] test spec_install_hooks_writes_all_three_in_reference_mode ... ok
[INFO] [stdout] test spec_log_default_uses_short_hash ... ok
[INFO] [stdout] test spec_install_hooks_stowaway_removes_pre_merge_commit ... ok
[INFO] [stdout] test spec_log_json_emits_array_of_commits ... ok
[INFO] [stdout] test spec_log_oneline_compact_format ... ok
[INFO] [stdout] test spec_log_full_hash_flag_restores_long ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_already_up_to_date_is_noop ... ok
[INFO] [stdout] test spec_merge_continue_without_in_progress_errors ... ok
[INFO] [stdout] test spec_merge_abort_without_in_progress_errors ... ok
[INFO] [stdout] test spec_log_n_limits_entries ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_aborts_before_git_when_dominance_fails ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_warns_when_other_has_no_morph_evidence ... ok
[INFO] [stdout] test spec_merge_nonexistent_branch_fails ... ok
[INFO] [stdout] test spec_merge_happy_path ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_auto_mirrors_current_branch_when_git_ahead ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_passes_when_only_head_is_certified ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_auto_mirrors_other_branch_from_git ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_warns_when_head_has_no_morph_evidence ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_conflicts_exit_nonzero_with_guidance ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_advances_existing_morph_branch_incrementally ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_fast_forward_advances_both_stores ... ok
[INFO] [stdout] test spec_merge_plan_shows_parent_bar ... ok
[INFO] [stdout] test spec_merge_plan_incompatible_suites_fails ... ok
[INFO] [stdout] test spec_merge_auto_union_suite_happy_path ... ok
[INFO] [stdout] test spec_merge_in_reference_mode_drives_git_merge_and_mirrors ... ok
[INFO] [stdout] test spec_merge_rejects_with_explained_metric_failure ... ok
[INFO] [stdout] test spec_mixed_authorship_variant_a_post_agent_edit_recorded ... ok
[INFO] [stdout] test spec_merge_plan_lists_per_branch_cases ... ok
[INFO] [stdout] test spec_merge_plan_with_retirement_preview ... ok
[INFO] [stdout] test spec_mixed_authorship_no_human_edits_when_no_run_attached ... ok
[INFO] [stdout] test spec_mixed_authorship_human_author_in_contributors_when_run_attached ... ok
[INFO] [stdout] test spec_merge_rejects_weak_metrics ... ok
[INFO] [stdout] test spec_mixed_authorship_variant_b_no_trace_record_recorded ... ok
[INFO] [stdout] test spec_merge_retire_with_existing_review_node_no_resynthesis ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_attaches_metrics_via_certification ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_creates_paired_git_commit ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_creates_empty_commit_when_no_diff ... ok
[INFO] [stdout] test spec_morph_eval_add_case_is_removed ... ok
[INFO] [stdout] test spec_morph_eval_suite_from_specs_is_removed ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_records_git_origin_sha ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_with_allow_empty_commit_creates_empty ... ok
[INFO] [stdout] test spec_merge_retire_synthesizes_review_node ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_records_introduces_cases_annotation ... ok
[INFO] [stdout] test spec_merge_retire_default_reason_when_omitted ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_does_not_recurse_via_post_commit_hook ... ok
[INFO] [stdout] test spec_morph_trace_subcommand_is_removed ... ok
[INFO] [stdout] test spec_morph_eval_suite_show_is_removed ... ok
[INFO] [stdout] test spec_morph_commit_in_reference_mode_enforces_required_metrics_without_escape_hatch ... ok
[INFO] [stdout] test spec_morph_tap_subcommand_is_removed ... ok
[INFO] [stdout] test spec_morph_run_root_is_removed ... ok
[INFO] [stdout] test spec_merge_start_then_continue_clean_three_way ... ok
[INFO] [stdout] test spec_morph_session_import_help_is_visible ... ok
[INFO] [stdout] test spec_merge_with_retirement_succeeds ... ok
[INFO] [stdout] test spec_morph_traces_subcommand_is_removed ... ok
[INFO] [stdout] test spec_morphignore_excludes_files_from_add ... ok
[INFO] [stdout] test spec_pipeline_show_accepts_branch_for_commit_pipeline_lookup ... ok
[INFO] [stdout] test spec_merge_stateful_retire_clean_three_way_synthesizes_review_node ... ok
[INFO] [stdout] test spec_pipeline_create_and_show ... ok
[INFO] [stdout] test spec_morph_run_record_json_is_removed ... ok
[INFO] [stdout] test spec_morph_run_record_session_is_removed ... ok
[INFO] [stdout] test spec_morphignore_excludes_files_from_files ... ok
[INFO] [stdout] test spec_morphignore_excludes_from_status ... ok
[INFO] [stdout] test spec_morphignore_directory_pattern ... ok
[INFO] [stdout] test spec_merge_stateful_retire_abort_clears_breadcrumb ... ok
[INFO] [stdout] test spec_morph_internal_suppresses_post_commit_hook ... ok
[INFO] [stdout] test spec_policy_show_default_is_empty ... ok
[INFO] [stdout] test spec_policy_round_trip ... ok
[INFO] [stdout] test spec_policy_exempt_does_not_apply_to_cli_commits ... ok
[INFO] [stdout] test spec_policy_init_writes_default_required_metrics ... ok
[INFO] [stdout] test spec_new_type_index_files_are_zero_byte_markers ... ok
[INFO] [stdout] test spec_policy_init_is_idempotent_without_force ... ok
[INFO] [stdout] test spec_merge_with_textual_conflict_drops_into_continue_flow ... ok
[INFO] [stdout] test spec_pipeline_show_missing_fails ... ok
[INFO] [stdout] test spec_post_checkout_to_detached_head_leaves_morph_alone ... ok
[INFO] [stdout] test spec_plain_commit_without_provenance_still_works ... ok
[INFO] [stdout] test spec_policy_exempt_git_hook_skips_required_metrics ... ok
[INFO] [stdout] test spec_post_checkout_creates_matching_morph_branch ... ok
[INFO] [stdout] test spec_policy_set_default_eval ... ok
[INFO] [stdout] test spec_merge_stateful_retire_with_textual_conflict_then_continue ... ok
[INFO] [stdout] test spec_post_rewrite_amend_marks_old_commit_rewritten ... ok
[INFO] [stdout] test spec_post_merge_preserves_first_parent_chain_across_multi_commit_pull ... ok
[INFO] [stdout] test spec_prefix_nonhex_errors ... ok
[INFO] [stdout] test spec_post_checkout_updates_morph_branch_to_matching_commit ... ok
[INFO] [stdout] test spec_prefix_no_match_errors ... ok
[INFO] [stdout] test spec_prompt_show_by_run_hash ... ok
[INFO] [stdout] test spec_prefix_too_short_errors ... ok
[INFO] [stdout] test spec_prompt_create_and_materialize ... ok
[INFO] [stdout] test spec_prompt_show_latest_session ... ok
[INFO] [stdout] test spec_prompt_show_no_runs_fails ... ok
[INFO] [stdout] test spec_post_merge_log_line_count_matches_git_history_after_multi_commit_pull ... ok
[INFO] [stdout] test spec_post_merge_hook_mirrors_after_non_ff_git_merge ... ok
[INFO] [stdout] morph: pre-merge gate bypassed (MORPH_NO_GATE=1)
[INFO] [stdout] test spec_post_rewrite_rebase_mirrors_each_rewritten_commit ... ok
[INFO] [stdout] test spec_record_session_on_fresh_init ... ok
[INFO] [stdout] test spec_pre_merge_commit_morph_no_gate_bypasses_with_warning ... ok
[INFO] [stdout] test spec_record_session_with_messages_json ... ok
[INFO] [stdout] test spec_reference_init_handles_empty_git_repo ... ok
[INFO] [stdout] test spec_reference_init_captures_git_head ... ok
[INFO] [stdout] test spec_push_transfers_evidence_backed_commit_closure ... ok
[INFO] [stdout] test spec_reference_init_no_git_init_errors_immediately ... ok
[INFO] [stdout] test spec_reference_init_requires_git_repo ... ok
[INFO] [stdout] morph: pre-merge gate blocked the merge — merged result would regress on certified parent metrics:
[INFO] [stdout]   metric 'tests_passed': merged 8 does not dominate other branch's 10 (direction: maximize, need >= 10)
[INFO] [stdout]   resolve by re-running tests on the merged tree and using `morph merge` (which gates with the merged metrics) or set MORPH_NO_GATE=1 to override one-off
[INFO] [stdout] Not committing merge; use 'git commit' to complete the merge.
[INFO] [stdout] test spec_reference_init_with_git_init_flag_creates_git_repo ... ok
[INFO] [stdout] test spec_pull_fast_forwards_local_branch ... ok
[INFO] [stdout] test spec_record_session_then_commit ... ok
[INFO] [stdout] test spec_post_merge_mirrors_every_commit_after_multi_commit_ff_pull ... ok
[INFO] [stdout] test spec_pre_merge_commit_blocks_when_merged_regresses_certification ... ok
[INFO] [stdout] test spec_reference_init_installs_post_commit_hook ... ok
[INFO] [stdout] test spec_push_branch_to_empty_remote ... ok
[INFO] [stdout] test spec_push_already_up_to_date ... ok
[INFO] [stdout] test spec_push_to_missing_remote_fails ... ok
[INFO] [stdout] morph: no morph evidence on 'other' — pre-merge gate proceeds without behavioral assertion from this side
[INFO] [stdout] test spec_push_non_fast_forward_fails ... ok
[INFO] [stdout] test spec_reference_sync_backfill_creates_morph_commit_per_git_commit ... ok
[INFO] [stdout] test spec_reference_status_clears_pending_after_certify ... ok
[INFO] [stdout] test spec_pre_merge_commit_lets_no_claim_through_with_warning ... ok
[INFO] [stdout] test spec_pull_diverged_without_merge_flag_errors_clearly ... ok
[INFO] [stdout] test spec_reference_sync_backfill_idempotent ... ok
[INFO] [stdout] test spec_pull_merge_flag_with_textual_conflicts_leaves_state_for_user ... ok
[INFO] [stdout] test spec_reference_status_surfaces_pending_certifications ... ok
[INFO] [stdout] test spec_pre_merge_commit_short_circuits_when_morph_internal_set ... ok
[INFO] [stdout] test spec_reference_sync_mirrors_git_merge_commit_with_two_parents ... ok
[INFO] [stdout] test spec_refs_json_lists_refs ... ok
[INFO] [stdout] test spec_reference_sync_creates_morph_commit_with_git_hook_origin ... ok
[INFO] [stdout] test spec_remote_add_and_list ... ok
[INFO] [stdout] test spec_remote_list_json ... ok
[INFO] [stdout] test spec_pull_merge_flag_finalizes_clean_three_way ... ok
[INFO] [stdout] test spec_refs_shows_local_branches ... ok
[INFO] [stdout] test spec_reference_sync_idempotent_when_no_new_git_commits ... ok
[INFO] [stdout] test spec_reference_sync_backfill_walks_from_init_sha_when_history_grows ... ok
[INFO] [stdout] test spec_run_list_json ... ok
[INFO] [stdout] test spec_remote_add_multiple ... ok
[INFO] [stdout] test spec_reference_sync_mirrors_every_intermediate_commit_when_head_unmirrored ... ok
[INFO] [stdout] test spec_serve_help ... ok
[INFO] [stdout] test spec_run_show_accepts_8char_prefix ... ok
[INFO] [stdout] test spec_reference_sync_after_multi_commit_drift_yields_consistent_topology ... ok
[INFO] [stdout] test spec_refs_shows_remote_tracking_after_fetch ... ok
[INFO] [stdout] test spec_session_record_inline_returns_run_hash ... ok
[INFO] [stdout] test spec_session_list_json_envelope ... ok
[INFO] [stdout] test spec_reference_sync_carries_git_commit_message ... ok
[INFO] [stdout] test spec_session_list_shows_recorded_session ... ok
[INFO] [stdout] test spec_run_record_and_eval_record ... ok
[INFO] [stdout] test spec_session_record_messages_form ... ok
[INFO] [stdout] test spec_setup_aoe_creates_config_toml ... ok
[INFO] [stdout] test spec_session_show_json ... ok
[INFO] [stdout] test spec_revert_invalid_hash_fails ... ok
[INFO] [stdout] test spec_run_show_accepts_40char_prefix ... ok
[INFO] [stdout] test spec_setup_aoe_config_has_lifecycle_hooks ... ok
[INFO] [stdout] test spec_session_show_displays_run_metadata ... ok
[INFO] [stdout] test spec_setup_aoe_config_has_sandbox_env_and_volumes ... ok
[INFO] [stdout] test spec_session_export_returns_eval_cases ... ok
[INFO] [stdout] test spec_setup_aoe_delegates_to_per_agent_setups_by_default ... ok
[INFO] [stdout] test spec_setup_aoe_no_bind_mount_skips_volume_entries ... ok
[INFO] [stdout] test spec_serve_requires_repo_or_flag ... ok
[INFO] [stdout] test spec_setup_aoe_dockerfile_documents_both_paths ... ok
[INFO] [stdout] test spec_session_show_with_trace_prints_events ... ok
[INFO] [stdout] test spec_setup_claude_code_hook_scripts_have_shebang ... ok
[INFO] [stdout] test spec_revert_creates_undo_commit ... ok
[INFO] [stdout] test spec_setup_aoe_preserves_existing_config_toml ... ok
[INFO] [stdout] test spec_setup_claude_code_requires_morph_init ... ok
[INFO] [stdout] test spec_setup_cursor_mcp_json_uses_absolute_morph_mcp_path ... ok
[INFO] [stdout] test spec_setup_aoe_skip_agents_does_not_delegate ... ok
[INFO] [stdout] test spec_revert_accepts_HEAD ... ok
[INFO] [stdout] test spec_setup_aoe_idempotent ... ok
[INFO] [stdout] test spec_rollup_squashes_commits ... ok
[INFO] [stdout] test spec_setup_claude_code_settings_has_mcp_morph ... ok
[INFO] [stdout] test spec_setup_claude_code_preserves_existing_settings ... ok
[INFO] [stdout] test spec_setup_claude_code_creates_settings_json ... ok
[INFO] [stdout] test spec_setup_aoe_requires_morph_init ... ok
[INFO] [stdout] test spec_setup_cursor_prints_resolved_mcp_command ... ok
[INFO] [stdout] test spec_setup_cursor_idempotent ... ok
[INFO] [stdout] test spec_setup_cursor_requires_morph_init ... ok
[INFO] [stdout] test spec_setup_cursor_preserves_existing_mcp_servers ... ok
[INFO] [stdout] test spec_setup_claude_code_idempotent ... ok
[INFO] [stdout] test spec_rollup_no_commits_fails ... ok
[INFO] [stdout] test spec_show_accepts_branch_name ... ok
[INFO] [stdout] test spec_setup_cursor_creates_mcp_json ... ok
[INFO] [stdout] test spec_show_displays_any_object ... ok
[INFO] [stdout] test spec_setup_claude_code_settings_has_hooks ... ok
[INFO] [stdout] test spec_stash_list ... ok
[INFO] [stdout] test spec_show_missing_object_fails ... ok
[INFO] [stdout] test spec_stash_save_clears_index ... ok
[INFO] [stdout] test spec_show_accepts_prefix ... ok
[INFO] [stdout] test spec_stash_pop_empty_fails ... ok
[INFO] [stdout] test spec_stash_save_empty_fails ... ok
[INFO] [stdout] test spec_rollup_nonexistent_ref_fails ... ok
[INFO] [stdout] test spec_show_invalid_hash_fails ... ok
[INFO] [stdout] test spec_show_accepts_HEAD ... ok
[INFO] [stdout] test spec_show_accepts_tag_name ... ok
[INFO] [stdout] test spec_status_empty_when_no_files ... ok
[INFO] [stdout] test spec_stateful_merge_abort_errors_when_no_merge_in_progress ... ok
[INFO] [stdout] test spec_status_in_reference_mode_shows_up_to_date_when_synced ... ok
[INFO] [stdout] test spec_status_outside_repo ... ok
[INFO] [stdout] test spec_status_clears_empty_head_metrics_warning_after_certify ... ok
[INFO] [stdout] test spec_status_clean_after_commit ... ok
[INFO] [stdout] test spec_status_shows_new_files_before_first_commit ... ok
[INFO] [stdout] Rewrote 1 commit(s) (1 annotated as 'rewritten').
[INFO] [stdout] test spec_status_json_no_repo_state ... ok
[INFO] [stdout] test spec_status_no_warning_when_metrics_present ... ok
[INFO] [stdout] test spec_status_in_reference_mode_shows_drift_when_behind ... ok
[INFO] [stdout] test spec_status_flags_stale_certification_after_amend ... ok
[INFO] [stdout] test spec_status_json_with_dirty_working_tree ... ok
[INFO] [stdout] test spec_status_does_not_count_indexed_marker_as_run ... ok
[INFO] [stdout] test spec_status_shows_deleted_after_remove ... ok
[INFO] [stdout] test spec_status_warns_when_head_has_empty_metrics ... ok
[INFO] [stdout] test spec_status_reports_drift_count_when_intermediate_commits_unmirrored ... ok
[INFO] [stdout] test spec_status_shows_modified_after_edit ... ok
[INFO] [stdout] test spec_stateful_merge_abort_resets_both_stores ... ok
[INFO] [stdout] test spec_tag_list_empty ... ok
[INFO] [stdout] test spec_stowaway_smoke_day1_init_then_first_certified_commit ... ok
[INFO] [stdout] Rewrote 1 commit(s) (1 annotated as 'rewritten').
[INFO] [stdout] test spec_stateful_merge_continue_after_conflict_resolution_finalizes_both_stores ... ok
[INFO] [stdout] test spec_sync_errors_when_no_upstream_configured ... ok
[INFO] [stdout] test spec_stateful_merge_continue_refuses_when_paths_unmerged ... ok
[INFO] [stdout] test spec_trace_show_accepts_prefix ... ok
[INFO] [stdout] test spec_upgrade_intermediate_0_4_jumps_to_latest_in_one_call ... ok
[INFO] [stdout] test spec_tag_delete ... ok
[INFO] [stdout] test spec_status_succeeds_after_certifications ... ok
[INFO] [stdout] test spec_stowaway_smoke_day3_certification_survives_amend_via_recertify ... ok
[INFO] [stdout] test spec_version_json_lists_every_supported_repo_version ... ok
[INFO] [stdout] test spec_version_subcommand_prints_human_line ... ok
[INFO] [stdout] test spec_stowaway_smoke_day2_drift_recovery_via_reference_sync ... ok
[INFO] [stdout] test spec_upgrade_legacy_0_0_walks_chain_to_latest ... ok
[INFO] [stdout] test spec_upgrade_at_latest_is_noop ... ok
[INFO] [stdout] test spec_tag_delete_nonexistent_fails ... ok
[INFO] [stdout] test spec_version_flag_prints_version ... ok
[INFO] [stdout] test spec_tag_create_and_list ... ok
[INFO] [stdout] test spec_sync_fast_forwards_via_configured_upstream ... ok
[INFO] [stdout] test spec_stowaway_smoke_day4_merge_teammate_branch_auto_mirrors_and_warns ... ok
[INFO] [stdout] test spec_trace_show_displays_events ... ok
[INFO] [stdout] test spec_tag_list_json ... ok
[INFO] [stdout] test spec_tag_duplicate_fails ... ok
[INFO] [stdout] test spec_stateful_merge_conflicts_write_breadcrumb_and_surface_in_status ... ok
[INFO] [stdout] test spec_version_subcommand_json_emits_machine_readable_body ... ok
[INFO] [stdout] test spec_solo_smoke_clean_then_conflict_then_continue_then_certified ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 432 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.71s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/ssh_fetch_integration.rs (/opt/rustwide/target/debug/deps/ssh_fetch_integration-ab2dcc719f7b38bc)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test morph_fetch_works_over_ssh_url ... ok
[INFO] [stdout] test morph_sync_uses_configured_upstream_over_ssh ... ok
[INFO] [stdout] test fetched_commit_preserves_morph_instance_across_ssh ... ok
[INFO] [stdout] test ssh_fetch_against_incompatible_protocol_version_errors_clearly ... ok
[INFO] [stdout] test push_and_fetch_against_bare_ssh_server ... ok
[INFO] [stdout] test ssh_push_to_gated_branch_surfaces_push_gate_failure ... ok
[INFO] [stdout] test morph_pull_fast_forwards_over_ssh_url ... ok
[INFO] [stdout] test morph_clone_works_against_bare_ssh_server ... ok
[INFO] [stdout] test morph_pull_merge_finalizes_clean_three_way_over_ssh ... ok
[INFO] [stdout] test ssh_push_gate_honors_glob_pattern_in_push_gated_branches ... ok
[INFO] [stderr]      Running tests/status_merge_integration.rs (/opt/rustwide/target/debug/deps/status_merge_integration-32d0fbb92511496c)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test status_outside_merge_does_not_show_merge_hints ... ok
[INFO] [stdout] test status_during_textual_merge_lists_unmerged_paths_and_hint ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.76s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/morph_core-f724c6306a61fec1)
[INFO] [stdout] 
[INFO] [stdout] running 659 tests
[INFO] [stdout] test author::tests::config_used_when_no_env_or_explicit ... ok
[INFO] [stdout] test author::tests::empty_strings_treated_as_absent ... ok
[INFO] [stdout] test agent::tests::generated_id_has_expected_shape ... ok
[INFO] [stdout] test author::tests::env_overrides_config_and_default ... ok
[INFO] [stdout] test author::tests::email_only_emits_brackets_alone ... ok
[INFO] [stdout] test author::tests::explicit_whitespace_falls_through ... ok
[INFO] [stdout] test author::tests::partial_env_takes_precedence_over_full_config ... ok
[INFO] [stdout] test author::tests::name_only_skips_angle_brackets ... ok
[INFO] [stdout] test author::tests::no_inputs_falls_back_to_morph ... ok
[INFO] [stdout] test author::tests::explicit_overrides_everything ... ok
[INFO] [stdout] test annotate::tests::parse_introduces_cases_arg_handles_whitespace_and_empties ... ok
[INFO] [stdout] test agent::tests::read_instance_id_missing_file ... ok
[INFO] [stdout] test author::tests::read_identity_config_missing_file_is_ok ... ok
[INFO] [stdout] test author::tests::read_after_write_round_trips ... ok
[INFO] [stdout] test agent::tests::ensure_is_idempotent ... ok
[INFO] [stdout] test author::tests::read_identity_config_missing_user_block_is_ok ... ok
[INFO] [stdout] test agent::tests::ensure_creates_when_absent ... ok
[INFO] [stdout] test author::tests::resolve_author_for_repo_uses_config_when_no_env ... ok
[INFO] [stdout] test author::tests::write_identity_config_creates_user_block_preserving_other_keys ... ok
[INFO] [stdout] test agent::tests::write_then_read_round_trips ... ok
[INFO] [stdout] test agent::tests::read_instance_id_missing_agent_block ... ok
[INFO] [stdout] test author::tests::write_identity_config_partial_update_keeps_other_field ... ok
[INFO] [stdout] test agent::tests::write_preserves_other_keys ... ok
[INFO] [stdout] test commit::tests::log_from_invalid_ref_returns_empty ... ok
[INFO] [stdout] test annotate::tests::build_introduces_cases_annotation_skips_empty_lists ... ok
[INFO] [stdout] test agent::tests::generated_ids_are_unique ... ok
[INFO] [stdout] test commit::tests::checkout_tree_nonexistent_branch_returns_not_found ... ok
[INFO] [stdout] test commit::tests::log_from_empty_repo_returns_empty ... ok
[INFO] [stdout] test commit::tests::create_commit_updates_ref ... ok
[INFO] [stdout] test commit::tests::resolve_provenance_fails_on_missing_trace ... ok
[INFO] [stdout] test commit::tests::create_tree_commit_clears_index ... ok
[INFO] [stdout] test commit::tests::create_tree_commit_stores_tree_hash ... ok
[INFO] [stdout] test commit::tests::create_tree_commit_defaults_pipeline_and_eval ... ok
[INFO] [stdout] test annotate::tests::create_and_list_annotation ... ok
[INFO] [stdout] test commit::tests::merge_full_rejects_when_not_dominating ... ok
[INFO] [stdout] test annotate::tests::list_filters_by_target_sub ... ok
[INFO] [stdout] test commit::tests::resolve_provenance_fails_on_non_run_object ... ok
[INFO] [stdout] test commit::tests::checkout_tree_detached_head ... ok
[INFO] [stdout] test commit::tests::merge_full_auto_union_suite ... ok
[INFO] [stdout] test commit::tests::rollup_base_equals_tip ... ok
[INFO] [stdout] test commit::tests::tree_commit_from_run_persists_env_constraints ... ok
[INFO] [stdout] test commit_config::tests::read_returns_none_when_config_missing ... ok
[INFO] [stdout] test diff::tests::diff_empty_trees_produces_no_changes ... ok
[INFO] [stdout] test commit_config::tests::read_returns_value_when_set ... ok
[INFO] [stdout] test commit_config::tests::write_preserves_other_keys ... ok
[INFO] [stdout] test diff::tests::diff_added_files ... ok
[INFO] [stdout] test commit::tests::tree_commit_from_run_persists_contributors_deduped ... ok
[INFO] [stdout] test diff::tests::diff_modified_files ... ok
[INFO] [stdout] test commit_config::tests::write_then_read_round_trips ... ok
[INFO] [stdout] test diff::tests::diff_unchanged_files_omitted ... ok
[INFO] [stdout] test diff::tests::diff_trees_none_to_tree_is_all_added ... ok
[INFO] [stdout] test commit::tests::rollup_preserves_tip_tree ... ok
[INFO] [stdout] test commit_config::tests::read_returns_none_when_commit_block_missing ... ok
[INFO] [stdout] test diff::tests::diff_deleted_files ... ok
[INFO] [stdout] test diff::tests::diff_trees_tree_to_none_is_all_deleted ... ok
[INFO] [stdout] test diff::tests::diff_mixed_changes ... ok
[INFO] [stdout] test commit::tests::create_tree_commit_empty_index_succeeds ... ok
[INFO] [stdout] test commit::tests::merge_requires_dominance ... ok
[INFO] [stdout] test eval_parsers::tests::cargo_returns_empty_when_no_summary ... ok
[INFO] [stdout] test eval_parsers::tests::auto_uses_hint_when_available ... ok
[INFO] [stdout] test eval_parsers::tests::auto_content_sniffs_pytest ... ok
[INFO] [stdout] test eval_parsers::tests::auto_distinguishes_jest_from_vitest ... ok
[INFO] [stdout] test diff::tests::diff_trees_with_store ... ok
[INFO] [stdout] test eval_parsers::tests::cargo_aggregates_multi_binary ... ok
[INFO] [stdout] test eval_parsers::tests::cargo_handles_ansi_escapes ... ok
[INFO] [stdout] test diff::tests::diff_status_display ... ok
[INFO] [stdout] test eval_parsers::tests::auto_returns_empty_on_unknown_input ... ok
[INFO] [stdout] test eval_parsers::tests::parse_with_runner_unknown_falls_back_to_auto ... ok
[INFO] [stdout] test eval_parsers::tests::vitest_summary_block ... ok
[INFO] [stdout] test eval_parsers::tests::jest_summary_block ... ok
[INFO] [stdout] test eval_parsers::tests::parse_with_runner_dispatches_named_runners ... ok
[INFO] [stdout] test diff::tests::diff_nested_tree_changes ... ok
[INFO] [stdout] test eval_parsers::tests::cargo_simple_passing_run ... ok
[INFO] [stdout] test eval_parsers::tests::go_test_aggregates_individual_outcomes ... ok
[INFO] [stdout] test eval_suite::tests::build_or_extend_suite_dedupes_by_id ... ok
[INFO] [stdout] test eval_suite::tests::cucumber_feature_yields_one_case_per_scenario ... ok
[INFO] [stdout] test eval_parsers::tests::pytest_simple_passing_run ... ok
[INFO] [stdout] test eval_parsers::tests::pytest_full_summary ... ok
[INFO] [stdout] test eval_suite::tests::build_or_extend_suite_starts_fresh_when_prev_missing ... ok
[INFO] [stdout] test eval_suite::tests::diff_suite_case_ids_tolerates_non_suite_hash ... ok
[INFO] [stdout] test eval_suite::tests::diff_suite_case_ids_returns_only_new_ids ... ok
[INFO] [stdout] test eval_suite::tests::yaml_spec_anonymous_doc_gets_synthetic_id ... ok
[INFO] [stdout] test eval_suite::tests::yaml_spec_with_named_doc_becomes_case ... ok
[INFO] [stdout] test eval_suite::tests::add_cases_from_paths_walks_directory ... ok
[INFO] [stdout] test commit::tests::resolve_provenance_fails_on_missing_object ... ok
[INFO] [stdout] test commit::tests::tree_commit_without_from_run_leaves_provenance_absent ... ok
[INFO] [stdout] test eval_suite::tests::diff_suite_case_ids_treats_no_old_suite_as_all_new ... ok
[INFO] [stdout] test commit::tests::tree_commit_from_run_persists_evidence_refs ... ok
[INFO] [stdout] test eval_suite::tests::diff_suite_case_ids_returns_empty_when_unchanged ... ok
[INFO] [stdout] test extract::tests::extract_fails_on_no_prompt_event ... ok
[INFO] [stdout] test extract::tests::extract_fails_on_unsupported_trace_shape ... ok
[INFO] [stdout] test extract::tests::extract_fails_on_missing_object ... ok
[INFO] [stdout] test extract::tests::extract_fails_on_missing_trace ... ok
[INFO] [stdout] test extract::tests::extract_fails_on_non_run_object ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_reports_stale_certifications ... ok
[INFO] [stdout] test forget::tests::forget_refuses_commit ... ok
[INFO] [stdout] test forget::tests::forget_refuses_with_referencing_commit_unless_force ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_recent_run_silences_no_recent_run ... ok
[INFO] [stdout] test extract::tests::extract_session_generate_env_mirrors_run_environment ... ok
[INFO] [stdout] test forget::tests::forget_is_idempotent_via_already_exists ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_silent_when_everything_satisfied ... ok
[INFO] [stdout] test extract::tests::extract_session_produces_deterministic_graph_shape ... ok
[INFO] [stdout] test extract::tests::extract_with_reviewer_maps_review_attribution ... ok
[INFO] [stdout] test hash::tests::agent_info_without_instance_id_defaults_to_none ... ok
[INFO] [stdout] test hash::tests::attribution_actors_set_roundtrip ... ok
[INFO] [stdout] test hash::tests::content_hash_git_deterministic ... ok
[INFO] [stdout] test extract::tests::extract_without_reviewer_falls_back_to_primary_agent ... ok
[INFO] [stdout] test extract::tests::extract_session_includes_prompt_blob_ref ... ok
[INFO] [stdout] test forget::tests::apply_tombstone_round_trips_from_remote ... ok
[INFO] [stdout] test hash::tests::contributor_info_instance_id_roundtrip ... ok
[INFO] [stdout] test hash::tests::content_hash_git_roundtrip_same_hash ... ok
[INFO] [stdout] test gc::tests::gc_removes_unreachable_objects ... ok
[INFO] [stdout] test hash::tests::content_hash_git_different_from_content_hash ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_dirty_tree_without_runs_reports_no_recent_run ... ok
[INFO] [stdout] test hash::tests::different_instance_id_different_hash ... ok
[INFO] [stdout] test hash::tests::different_object_different_hash ... ok
[INFO] [stdout] test hash::tests::from_hex_invalid_rejected ... ok
[INFO] [stdout] test extract::tests::extract_session_persists_provenance ... ok
[INFO] [stdout] test hash::tests::pipeline_node_env_roundtrip ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_fresh_repo_reports_missing_suite_only_when_clean ... ok
[INFO] [stdout] test hash::tests::attribution_entry_instance_id_roundtrip ... ok
[INFO] [stdout] test index::tests::clear_index_removes_file ... ok
[INFO] [stdout] test index::tests::clear_missing_index_is_noop ... ok
[INFO] [stdout] test index::tests::index_reads_old_format_without_unmerged_field ... ok
[INFO] [stdout] test index::tests::index_writes_omit_unmerged_when_empty ... ok
[INFO] [stdout] test hash::tests::roundtrip_all_simple_types ... ok
[INFO] [stdout] test hash::tests::roundtrip_blob_serialization ... ok
[INFO] [stdout] test index::tests::read_missing_index_returns_empty ... ok
[INFO] [stdout] test identity::tests::identity_pipeline_hash_stable ... ok
[INFO] [stdout] test language::tests::adapter_for_filename_picks_python ... ok
[INFO] [stdout] test index::tests::write_read_roundtrip ... ok
[INFO] [stdout] test index::tests::update_index_overwrites_existing_entry ... ok
[INFO] [stdout] test language::tests::python_detect_target_single_function ... ok
[INFO] [stdout] test language::tests::python_detect_target_from_hint ... ok
[INFO] [stdout] test language::tests::python_detect_language ... ok
[INFO] [stdout] test language::tests::python_extract_symbol_references ... ok
[INFO] [stdout] test language::tests::python_slice_async ... ok
[INFO] [stdout] test language::tests::python_extract_symbols ... ok
[INFO] [stdout] test language::tests::python_slice_function ... ok
[INFO] [stdout] test language::tests::stopwords_rejected ... ok
[INFO] [stdout] test hash::tests::review_node_kind_roundtrip ... ok
[INFO] [stdout] test identity::tests::identity_roundtrip_serialization ... ok
[INFO] [stdout] test language::tests::slice_includes_decorators ... ok
[INFO] [stdout] test gc::tests::gc_preserves_reachable_objects ... ok
[INFO] [stdout] test gc::tests::gc_cleans_type_index_dirs ... ok
[INFO] [stdout] test forget::tests::forget_run_writes_tombstone_and_deletes_object ... ok
[INFO] [stdout] test eval_suite::tests::compute_eval_gaps_empty_head_metrics_is_flagged ... ok
[INFO] [stdout] test extract::tests::extract_session_attribution_includes_primary_agent ... ok
[INFO] [stdout] test hash::tests::agent_info_with_instance_id_roundtrip ... ok
[INFO] [stdout] test hash::tests::hash_deterministic ... ok
[INFO] [stdout] test index::tests::resolve_unmerged_clears_entry_and_writes_normal_entry ... ok
[INFO] [stdout] test index::tests::update_index_adds_entry ... ok
[INFO] [stdout] test index::tests::mark_unmerged_persists_entry_with_three_blobs ... ok
[INFO] [stdout] test merge::tests::union_evidence_refs_dedupes_and_sorts ... ok
[INFO] [stdout] test merge::tests::union_evidence_refs_handles_one_sided ... ok
[INFO] [stdout] test merge::tests::union_evidence_refs_returns_none_when_both_empty ... ok
[INFO] [stdout] test merge::tests::execute_merge_keeps_none_when_neither_parent_has_evidence ... ok
[INFO] [stdout] test merge::tests::execute_merge_fails_with_detailed_explanation ... ok
[INFO] [stdout] test merge::tests::format_plan_contains_expected_sections ... ok
[INFO] [stdout] test merge::tests::prepare_merge_reference_bar_minimize ... ok
[INFO] [stdout] test merge::tests::dominance_explanation_identifies_blocking_metric ... ok
[INFO] [stdout] test merge::tests::prepare_merge_computes_union_suite ... ok
[INFO] [stdout] test merge::tests::dominance_explanation_direction_aware ... ok
[INFO] [stdout] test forget::tests::forget_refuses_blob_unless_prompt_kind ... ok
[INFO] [stdout] test merge::tests::retirement_removes_metric_from_dominance_check ... ok
[INFO] [stdout] test merge_flow::tests::abort_merge_errors_when_no_merge_in_progress ... ok
[INFO] [stdout] test merge::tests::prepare_merge_incompatible_suites_fails ... ok
[INFO] [stdout] test merge_flow::tests::abort_merge_clears_state_and_resets_index_when_merge_in_progress ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_errors_when_no_merge_in_progress ... ok
[INFO] [stdout] test merge::tests::execute_merge_succeeds_when_dominating ... ok
[INFO] [stdout] test merge::tests::execute_merge_writes_evidence_union_to_commit ... ok
[INFO] [stdout] test merge_flow::tests::abort_merge_restores_working_tree_to_orig_head ... ok
[INFO] [stdout] test merge::tests::prepare_merge_collects_introduces_cases_per_branch ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_errors_when_unmerged_index_entries_remain ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_injects_review_node_when_breadcrumb_present ... ok
[INFO] [stdout] test merge::tests::prepare_merge_computes_reference_bar_maximize ... ok
[INFO] [stdout] test merge::tests::execute_merge_skips_dominance_when_policy_is_none ... ok
[INFO] [stdout] test merge_flow::tests::merge_progress_summary_lists_pipeline_node_conflicts ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_skips_dominance_when_policy_is_none ... ok
[INFO] [stdout] test merge_flow::tests::merge_progress_summary_returns_none_when_no_merge_in_progress ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_already_up_to_date_no_op ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_writes_evidence_union_from_parents ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_runs_dominance_check_against_both_parents ... ok
[INFO] [stdout] test merge_flow::tests::resolve_node_errors_when_node_not_in_pipeline ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_persists_retirement_breadcrumb_and_retires_union_suite ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_aborts_cleanly_on_suite_incompatible ... ok
[INFO] [stdout] test merge_flow::tests::resolve_node_writes_chosen_node_to_merge_pipeline ... ok
[INFO] [stdout] test merge_flow::tests::merge_progress_summary_lists_unmerged_paths_when_textual_conflicts ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_uses_merge_pipeline_from_disk ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_refuses_when_working_tree_dirty_and_require_clean_set ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_writes_merge_pipeline_when_pipeline_needs_resolution ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_fast_forwardable_returns_no_resolution_needed ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_completes_clean_merge_no_state_files ... ok
[INFO] [stdout] test metrics::tests::aggregate_lower_ci_bound ... ok
[INFO] [stdout] test metrics::tests::aggregate_min ... ok
[INFO] [stdout] test merge_state::tests::merge_state_suite_hash_roundtrip ... ok
[INFO] [stdout] test merge_flow::tests::continue_merge_picks_up_resolved_textual_files ... ok
[INFO] [stdout] test merge_state::tests::clear_merge_state_removes_all_files_and_in_progress_flag ... ok
[INFO] [stdout] test metrics::tests::aggregate_single_min ... ok
[INFO] [stdout] test metrics::tests::aggregate_single_lower_ci_bound ... ok
[INFO] [stdout] test metrics::tests::aggregate_single_mean ... ok
[INFO] [stdout] test metrics::tests::aggregate_mean ... ok
[INFO] [stdout] test metrics::tests::aggregate_empty_scores_err ... ok
[INFO] [stdout] test metrics::tests::aggregate_unknown_method_err ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_clean_three_way_no_user_input ... ok
[INFO] [stdout] test metrics::tests::aggregate_suite_roundtrip ... ok
[INFO] [stdout] test metrics::tests::check_thresholds_fail ... ok
[INFO] [stdout] test metrics::tests::check_thresholds_pass ... ok
[INFO] [stdout] test metrics::tests::check_thresholds_minimize_direction ... ok
[INFO] [stdout] test metrics::tests::dominance_merged_less_fails ... ok
[INFO] [stdout] test metrics::tests::dominance_reflexive ... ok
[INFO] [stdout] test metrics::tests::dominance_merged_has_extra_metrics ... ok
[INFO] [stdout] test metrics::tests::dominance_merged_missing_parent_metric_fails ... ok
[INFO] [stdout] test merge_state::tests::merge_state_retirement_breadcrumb_roundtrip ... ok
[INFO] [stdout] test metrics::tests::aggregate_p95 ... ok
[INFO] [stdout] test merge_state::tests::merge_state_head_msg_orig_roundtrip ... ok
[INFO] [stdout] test metrics::tests::aggregate_single_p95 ... ok
[INFO] [stdout] test metrics::tests::dominance_with_suite_maximize ... ok
[INFO] [stdout] test merge_state::tests::merge_state_pipeline_json_roundtrip ... ok
[INFO] [stdout] test metrics::tests::dominance_merged_greater ... ok
[INFO] [stdout] test metrics::tests::retire_all_metrics_ok ... ok
[INFO] [stdout] test metrics::tests::retire_nonexistent_metric_errors ... ok
[INFO] [stdout] test metrics::tests::dominance_with_suite_minimize ... ok
[INFO] [stdout] test metrics::tests::dominance_with_suite_metric_missing_from_both ... ok
[INFO] [stdout] test metrics::tests::dominance_with_suite_mixed_directions ... ok
[INFO] [stdout] test metrics::tests::retire_removes_associated_cases ... ok
[INFO] [stdout] test metrics::tests::union_suites_conflicting_threshold_errors ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_writes_merge_head_when_resolution_needed ... ok
[INFO] [stdout] test metrics::tests::retire_removes_metric ... ok
[INFO] [stdout] test metrics::tests::union_suites_deduplicates_cases ... ok
[INFO] [stdout] test metrics::tests::union_suites_disjoint ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_do_not_ignore_source_files ... ok
[INFO] [stdout] test metrics::tests::union_suites_overlapping_identical ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_ignore_git_dir ... ok
[INFO] [stdout] test migrate::tests::migrate_0_0_to_0_2_no_objects_dir ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_ignore_target ... ok
[INFO] [stdout] test morphignore::tests::directory_pattern_matches ... ok
[INFO] [stdout] test morphignore::tests::gitignore_patterns_are_respected ... ok
[INFO] [stdout] test morphignore::tests::is_ignored_returns_false_when_no_matcher ... ok
[INFO] [stdout] test morphignore::tests::is_rel_path_ignored_returns_false_when_no_matcher ... ok
[INFO] [stdout] test morphignore::tests::is_rel_path_ignored_works_with_defaults ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_ignore_pycache ... ok
[INFO] [stdout] test morphignore::tests::load_returns_some_even_without_any_ignore_files ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_ignore_venv ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_marks_unmerged_index_entries_for_textual_conflicts ... ok
[INFO] [stdout] test morphignore::tests::morphignore_adds_extra_patterns ... ok
[INFO] [stdout] test migrate::tests::migrate_0_0_to_0_2_empty_objects_dir ... ok
[INFO] [stdout] test migrate::tests::migrate_0_2_to_0_3_is_idempotent ... ok
[INFO] [stdout] test morphignore::tests::negation_pattern_unignores ... ok
[INFO] [stdout] test migrate::tests::migrate_0_2_to_0_3_bumps_version ... ok
[INFO] [stdout] test morphignore::tests::builtin_defaults_ignore_node_modules ... ok
[INFO] [stdout] test morphignore::tests::load_returns_matcher_when_morphignore_exists ... ok
[INFO] [stdout] test migrate::tests::migrate_0_3_to_0_4_empty_objects_dir ... ok
[INFO] [stdout] test morphignore::tests::path_outside_repo_root_not_ignored ... ok
[INFO] [stdout] test morphignore::tests::simple_glob_pattern_matches ... ok
[INFO] [stdout] test morphignore::tests::multiple_patterns ... ok
[INFO] [stdout] test objects::tests::commit_with_morph_instance_round_trips ... ok
[INFO] [stdout] test morphignore::tests::morphignore_can_negate_builtin_defaults ... ok
[INFO] [stdout] test objects::tests::legacy_commit_without_morph_origin_deserializes ... ok
[INFO] [stdout] test migrate::tests::migrate_0_4_to_0_5_writes_correct_version ... ok
[INFO] [stdout] test migrate::tests::migrate_0_3_to_0_4_creates_gitignore ... ok
[INFO] [stdout] test objects::tests::legacy_commit_without_git_origin_sha_deserializes ... ok
[INFO] [stdout] test objects::tests::commit_with_morph_origin_round_trips ... ok
[INFO] [stdout] test objmerge::tests::merge_base_criss_cross_deterministic ... ok
[INFO] [stdout] test objmerge::tests::merge_base_walks_both_parents_of_merge ... ok
[INFO] [stdout] test objmerge::tests::merge_base_ancestor_returns_ancestor ... ok
[INFO] [stdout] test objects::tests::legacy_commit_without_morph_instance_deserializes ... ok
[INFO] [stdout] test objmerge::tests::merge_base_self_returns_self ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_emits_pipeline_stub_when_pipelines_differ ... ok
[INFO] [stdout] test objmerge::tests::merge_base_two_siblings ... ok
[INFO] [stdout] test objmerge::tests::merge_base_disjoint_returns_none ... ok
[INFO] [stdout] test objmerge::tests::merge_base_symmetric ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_proceeds_when_working_tree_dirty_and_require_clean_unset ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_writes_merge_suite_when_suite_resolved ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_emits_tree_stub_when_trees_differ ... ok
[INFO] [stdout] test morphignore::tests::nested_path_matching ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_returns_structural_conflict_incompatible_thresholds ... ok
[INFO] [stdout] test objmerge::tests::merge_outcome_already_merged ... ok
[INFO] [stdout] test objmerge::tests::obj_conflict_structural_display ... ok
[INFO] [stdout] test objmerge::tests::obj_conflict_textual_display ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_disjoint_node_adds_unioned ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_edges_orphaned_dropped ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_edges_unioned_disjoint ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_identical_returns_same ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_node_deleted_both_sides ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_modify_delete_conflicts ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_node_deleted_one_side_unchanged_other ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_unions_compatible_suites ... ok
[INFO] [stdout] test objmerge::tests::merge_outcome_already_ahead ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_node_modified_both_sides_differently_conflicts ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_node_modified_both_sides_same_way ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_node_modified_one_side ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_only_theirs_changed_takes_theirs ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_prompts_unioned ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_resolves_pipeline_when_pipemerge_clean ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_respects_retired_metrics ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_modify_delete_emits_tree_divergent ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_uses_explicit_suite_when_compatible ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_same_id_diff_body_added_both_conflicts ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_only_ours_changed_takes_ours ... ok
[INFO] [stdout] test policy::tests::branch_matches_any_short_circuits ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_emits_textual_for_overlapping_edits ... ok
[INFO] [stdout] test pipemerge::tests::merge_pipelines_same_id_same_body_added_both_no_conflict ... ok
[INFO] [stdout] test policy::tests::branch_matches_pattern_combinations ... ok
[INFO] [stdout] test policy::tests::branch_matches_pattern_handles_literal_strings ... ok
[INFO] [stdout] test policy::tests::branch_matches_pattern_question_mark_matches_one_non_slash ... ok
[INFO] [stdout] test policy::tests::branch_matches_pattern_star_does_not_cross_slash ... ok
[INFO] [stdout] test policy::tests::default_policy_when_absent ... ok
[INFO] [stdout] test policy::tests::certify_fails_when_required_metrics_missing ... ok
[INFO] [stdout] test objmerge::tests::merge_outcome_diverged ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_surfaces_node_conflicts_as_structural ... ok
[INFO] [stdout] test objmerge::tests::merge_outcome_fast_forward ... ok
[INFO] [stdout] test objmerge::tests::merge_commits_resolves_tree_when_clean ... ok
[INFO] [stdout] test policy::tests::effective_metrics_errors_on_non_commit_target ... ok
[INFO] [stdout] test policy::tests::certify_fails_when_thresholds_not_met ... ok
[INFO] [stdout] test migrate::tests::migrate_0_3_to_0_4_moves_objects_to_fanout ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_glob_does_not_cross_slash_in_release_pattern ... ok
[INFO] [stdout] test migrate::tests::migrate_0_0_to_0_2_rewrites_hashes_and_sets_version ... ok
[INFO] [stdout] test policy::tests::effective_metrics_certification_overrides_inline_per_key ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_passes_for_unconfigured_branches ... ok
[INFO] [stdout] test policy::tests::effective_metrics_returns_inline_when_no_certification ... ok
[INFO] [stdout] test policy::tests::effective_metrics_uses_latest_certification_when_multiple_exist ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_matches_glob_patterns_in_push_gated_branches ... ok
[INFO] [stdout] test policy::tests::missing_required_metrics_empty_policy_is_always_satisfied ... ok
[INFO] [stdout] test policy::tests::missing_required_metrics_returns_absent_names_in_order ... ok
[INFO] [stdout] test policy::tests::policy_preserves_other_config_keys ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_passes_when_metrics_meet_thresholds ... ok
[INFO] [stdout] test policy::tests::gate_fails_for_uncertified_commit ... ok
[INFO] [stdout] test policy::tests::push_gated_branches_default_empty_for_legacy_configs ... ok
[INFO] [stdout] test policy::tests::push_gated_branches_round_trip ... ok
[INFO] [stdout] test record::tests::record_conversation_backward_compat_no_metadata ... ok
[INFO] [stdout] test record::tests::record_conversation_metadata_merges_into_payload ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_passes_for_non_head_refs ... ok
[INFO] [stdout] test record::tests::record_conversation_opencode_style_tool_parts ... ok
[INFO] [stdout] test record::tests::record_conversation_per_message_timestamps ... ok
[INFO] [stdout] test record::tests::record_eval_metrics_parses_file ... ok
[INFO] [stdout] test record::tests::record_eval_metrics_rejects_missing_metrics_key ... ok
[INFO] [stdout] test record::tests::record_eval_metrics_rejects_non_numeric_metric ... ok
[INFO] [stdout] test record::tests::record_eval_metrics_rejects_non_object_metrics ... ok
[INFO] [stdout] test record::tests::record_eval_metrics_rejects_non_object_root ... ok
[INFO] [stdout] test policy::tests::policy_round_trip ... ok
[INFO] [stdout] test record::tests::record_run_ingests_run_from_json_file ... ok
[INFO] [stdout] test record::tests::record_run_rejects_non_run_object ... ok
[INFO] [stdout] test record::tests::record_eval_run_persists_run_with_metrics_and_trace ... ok
[INFO] [stdout] test record::tests::record_run_trace_hash_mismatch_fails ... ok
[INFO] [stdout] test policy::tests::effective_metrics_layers_certification_over_empty_inline ... ok
[INFO] [stdout] test record::tests::record_run_with_artifacts ... ok
[INFO] [stdout] test policy::tests::certify_records_annotation ... ok
[INFO] [stdout] test record::tests::record_run_with_trace_file_validates_hash ... ok
[INFO] [stdout] test policy::tests::effective_metrics_returns_empty_for_uncertified_empty_commit ... ok
[INFO] [stdout] test merge_flow::tests::start_merge_writes_working_tree_for_clean_paths_and_conflict_markers ... ok
[INFO] [stdout] test record::tests::record_conversation_stores_all_messages ... ok
[INFO] [stdout] test record::tests::record_conversation_links_to_head_commit ... ok
[INFO] [stdout] test policy::tests::gate_output_identifies_failure_reason ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_passes_when_branch_not_listed ... ok
[INFO] [stdout] test record::tests::record_session_stores_run_and_trace ... ok
[INFO] [stdout] test policy::tests::effective_metrics_for_commit_matches_effective_metrics ... ok
[INFO] [stdout] test record::tests::record_session_populates_type_index_dirs ... ok
[INFO] [stdout] test policy::tests::enforce_push_gate_rejects_failing_commit_on_gated_branch ... ok
[INFO] [stdout] test record::tests::record_session_uses_defaults_for_model_and_agent ... ok
[INFO] [stdout] test record::tests::run_test_command_rejects_empty_command ... ok
[INFO] [stdout] test policy::tests::gate_fails_when_metrics_missing ... ok
[INFO] [stdout] test policy::tests::gate_passes_for_certified_commit ... ok
[INFO] [stdout] test policy::tests::certify_passes_with_valid_metrics ... ok
[INFO] [stdout] test record::tests::run_test_command_executes_and_records_metrics ... ok
[INFO] [stdout] test reference::tests::git_parents_returns_empty_for_root_commit ... ok
[INFO] [stdout] test reference::tests::install_post_commit_hook_back_compat_alias ... ok
[INFO] [stdout] test reference::tests::git_head_sha_none_for_empty_repo ... ok
[INFO] [stdout] test reference::tests::git_head_sha_resolves_after_commit ... ok
[INFO] [stdout] test reference::tests::install_reference_hooks_solo_adds_pre_merge_commit ... ok
[INFO] [stdout] test reference::tests::install_reference_hooks_refuses_to_clobber_foreign_content ... ok
[INFO] [stdout] test policy::tests::certify_respects_minimize_direction ... ok
[INFO] [stdout] test reference::tests::is_git_working_tree_detects_dot_git ... ok
[INFO] [stdout] test reference::tests::install_reference_hooks_writes_stowaway_quartet ... ok
[INFO] [stdout] test reference::tests::install_reference_hooks_tolerates_legacy_post_commit ... ok
[INFO] [stdout] test reference::tests::pending_certifications_stops_at_non_git_hook_parent ... ok
[INFO] [stdout] test reference::tests::handle_post_checkout_skips_file_checkouts ... ok
[INFO] [stdout] test reference::tests::handle_post_checkout_returns_detached_head_outcome ... ok
[INFO] [stdout] test reference::tests::install_reference_hooks_solo_to_stowaway_removes_pre_merge ... ok
[INFO] [stdout] test repo::tests::init_bare_layout_at_root_no_gitignore ... ok
[INFO] [stdout] test repo::tests::init_bare_refuses_existing_repo ... ok
[INFO] [stdout] test repo::tests::init_bare_seeds_agent_instance_id ... ok
[INFO] [stdout] test repo::tests::init_bare_writes_default_policy_with_required_metrics ... ok
[INFO] [stdout] test repo::tests::init_creates_gitignore_for_objects ... ok
[INFO] [stdout] test reference::tests::git_parents_returns_two_for_merge_commit ... ok
[INFO] [stdout] test repo::tests::init_creates_prompts_and_evals_under_morph ... ok
[INFO] [stdout] test reference::tests::handle_post_checkout_advances_morph_branch_to_match_git ... ok
[INFO] [stdout] test repo::tests::init_does_not_create_top_level_dirs ... ok
[INFO] [stdout] test repo::tests::init_does_not_create_programs_dir ... ok
[INFO] [stdout] test repo::tests::init_creates_morph_internals ... ok
[INFO] [stdout] test repo::tests::init_seeds_agent_instance_id ... ok
[INFO] [stdout] test repo::tests::init_errors_when_already_initialized ... ok
[INFO] [stdout] test repo::tests::is_bare_defaults_to_false_when_config_missing ... ok
[INFO] [stdout] test repo::tests::init_writes_default_policy_with_required_metrics ... ok
[INFO] [stdout] test repo::tests::is_bare_false_for_working_repos ... ok
[INFO] [stdout] test reference::tests::handle_post_rewrite_skips_when_old_morph_unknown ... ok
[INFO] [stdout] test repo::tests::init_writes_repo_version_at_latest ... ok
[INFO] [stdout] test reference::tests::handle_post_rewrite_amend_annotates_old_commit ... ok
[INFO] [stdout] test reference::tests::sync_to_head_appends_for_new_git_commits ... ok
[INFO] [stdout] test repo::tests::open_store_0_0_returns_fs_store_behavior ... ok
[INFO] [stdout] test repo::tests::open_store_0_2_after_migrate_returns_gix_store_behavior ... ok
[INFO] [stdout] test repo::tests::read_repo_version_defaults_to_0_0_when_config_missing ... ok
[INFO] [stdout] test reference::tests::backfill_creates_one_commit_per_git_commit_in_topo_order ... ok
[INFO] [stdout] test repo::tests::read_repo_version_returns_latest_after_init ... ok
[INFO] [stdout] test repo::tests::is_bare_true_for_bare_repos ... ok
[INFO] [stdout] test repo::tests::open_store_handles_0_5 ... ok
[INFO] [stdout] test repo::tests::require_store_version_err_when_repo_is_legacy ... ok
[INFO] [stdout] test repo::tests::resolve_morph_dir_errors_on_unrelated_directory ... ok
[INFO] [stdout] test repo::tests::resolve_morph_dir_finds_working_layout ... ok
[INFO] [stdout] test repo::tests::resolve_morph_dir_finds_bare_layout ... ok
[INFO] [stdout] test repo::tests::require_store_version_returns_repo_too_new_for_unknown_higher_version ... ok
[INFO] [stdout] test reference::tests::pending_certifications_drops_after_certify ... ok
[INFO] [stdout] test repo::tests::require_store_version_ok_when_allowed ... ok
[INFO] [stdout] test repo::tests::resolve_morph_dir_prefers_working_when_both_exist ... ok
[INFO] [stdout] test reference::tests::drift_summary_zero_when_head_and_ancestors_all_mirrored ... ok
[INFO] [stdout] test revert::tests::revert_non_commit_fails ... ok
[INFO] [stdout] test run_breadcrumb::tests::clear_removes_file_idempotently ... ok
[INFO] [stdout] test reference::tests::sync_to_head_creates_git_hook_commit ... ok
[INFO] [stdout] test repo::tests::write_repo_version_round_trips ... ok
[INFO] [stdout] test revert::tests::revert_root_commit_produces_empty_tree ... ok
[INFO] [stdout] test run_breadcrumb::tests::fingerprint_index_is_deterministic_and_distinguishes_entries ... ok
[INFO] [stdout] test revert::tests::revert_updates_branch_ref ... ok
[INFO] [stdout] test revert::tests::revert_creates_commit_with_parent_tree ... ok
[INFO] [stdout] test repo::tests::require_store_version_returns_repo_too_old_for_known_lower_version ... ok
[INFO] [stdout] test reference::tests::sync_to_head_idempotent ... ok
[INFO] [stdout] test ssh_proto::tests::diverged_round_trips_with_typed_fields ... ok
[INFO] [stdout] test run_breadcrumb::tests::read_errors_on_malformed_json ... ok
[INFO] [stdout] test run_breadcrumb::tests::read_returns_none_when_missing ... ok
[INFO] [stdout] test run_breadcrumb::tests::record_last_run_captures_head_and_index_fingerprint ... ok
[INFO] [stdout] test ssh_proto::tests::hello_response_omits_protocol_fields_for_legacy_servers ... ok
[INFO] [stdout] test ssh_proto::tests::not_found_round_trips ... ok
[INFO] [stdout] test ssh_proto::tests::incompatible_remote_round_trips ... ok
[INFO] [stdout] test ssh_proto::tests::ok_response_skips_none_fields ... ok
[INFO] [stdout] test ssh_proto::tests::request_round_trips_through_json ... ok
[INFO] [stdout] test ssh_proto::tests::unknown_op_is_a_distinct_kind ... ok
[INFO] [stdout] test ssh_proto::tests::hello_response_advertises_protocol_and_repo_version ... ok
[INFO] [stdout] test run_breadcrumb::tests::write_then_read_roundtrips ... ok
[INFO] [stdout] test run_breadcrumb::tests::resolve_fresh_returns_breadcrumb_when_head_and_index_match ... ok
[INFO] [stdout] test run_breadcrumb::tests::resolve_fresh_returns_none_when_no_breadcrumb ... ok
[INFO] [stdout] test ssh_proto::tests::protocol_version_constant_is_one_in_pr6 ... ok
[INFO] [stdout] test run_breadcrumb::tests::resolve_fresh_marks_head_change_as_stale ... ok
[INFO] [stdout] test run_breadcrumb::tests::resolve_fresh_marks_index_change_as_stale ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_parses_ipv6_literal ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_parses_ipv6_literal_with_port ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_parses_scp_style ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_get_missing_surfaces_typed_not_found ... ok
[INFO] [stdout] test ssh_store::tests::ssh_ref_write_rejects_missing_closure ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_rejects_local_paths ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_parses_ssh_scheme_with_port ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_rejects_malformed_ssh_scheme ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_rejects_unbracketed_ipv6 ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_scp_style_rejects_windows_drive_letter ... ok
[INFO] [stdout] test ssh_store::tests::validate_hello_accepts_legacy_helpers_silently ... ok
[INFO] [stdout] test ssh_store::tests::validate_hello_accepts_matching_protocol ... ok
[INFO] [stdout] test ssh_store::tests::validate_hello_rejects_newer_protocol_with_typed_error ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_has_returns_false_for_missing ... ok
[INFO] [stdout] test stash::tests::multiple_stash_pop_lifo ... ok
[INFO] [stdout] test stash::tests::next_stash_id_adds_suffix_on_collision ... ok
[INFO] [stdout] test reference::tests::backfill_resolves_merge_commit_parents_from_both_branches ... ok
[INFO] [stdout] test stash::tests::stash_list_empty_dir ... ok
[INFO] [stdout] test stash::tests::stash_pop_empty_fails ... ok
[INFO] [stdout] test stash::tests::stash_save_empty_index_fails ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_list_branches_and_refs ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_ref_round_trip ... ok
[INFO] [stdout] test reference::tests::pending_certifications_counts_uncertified_git_hook_commits ... ok
[INFO] [stdout] test stash::tests::stash_save_without_message ... ok
[INFO] [stdout] test stash::tests::stash_save_and_pop_roundtrip ... ok
[INFO] [stdout] test store::tests::fanout_all_object_hashes ... ok
[INFO] [stdout] test ssh_store::tests::ssh_url_parses_ssh_scheme ... ok
[INFO] [stdout] test ssh_store::tests::ssh_ref_write_rejects_failed_push_gate ... ok
[INFO] [stdout] test ssh_store::tests::validate_hello_rejects_older_protocol_too ... ok
[INFO] [stdout] test store::tests::fanout_delete_object ... ok
[INFO] [stdout] test store::tests::get_missing_returns_not_found ... ok
[INFO] [stdout] test store::tests::git_store_ref_write_read_and_symbolic_head ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_connects_via_local_spawn ... ok
[INFO] [stdout] test store::tests::from_store_version_selects_correct_layout ... ok
[INFO] [stdout] test store::tests::git_store_list_filters_by_type ... ok
[INFO] [stdout] test stash::tests::stash_list_shows_entries_most_recent_first ... ok
[INFO] [stdout] test store::tests::list_hashes_with_prefix_fanout_walks_only_target_subdir ... ok
[INFO] [stdout] test store::tests::fanout_list_filters_by_type ... ok
[INFO] [stdout] test ssh_store::tests::ssh_ref_write_rejects_partial_closure ... ok
[INFO] [stdout] test store::tests::list_branches_returns_heads_only ... ok
[INFO] [stdout] test reference::tests::drift_summary_counts_unmirrored_first_parent_ancestors ... ok
[INFO] [stdout] test store::tests::git_store_put_get_roundtrip ... ok
[INFO] [stdout] test store::tests::fanout_put_get_roundtrip ... ok
[INFO] [stdout] test store::tests::list_refs_returns_all_refs_under_prefix ... ok
[INFO] [stdout] test ssh_store::tests::ssh_store_get_round_trips_object ... ok
[INFO] [stdout] test ssh_store::tests::fetch_remote_works_against_ssh_store ... ok
[INFO] [stdout] test store::tests::list_filters_by_object_type ... ok
[INFO] [stdout] test store::tests::list_annotation_lazily_builds_index_on_legacy_store ... ok
[INFO] [stdout] test store::tests::ref_read_raw_after_ref_write_resolves_to_hash ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_accepts_uppercase ... ok
[INFO] [stdout] test store::tests::list_pipeline_uses_index_after_put ... ok
[INFO] [stdout] test store::tests::prompt_blob_lands_in_both_blobs_and_prompts_indexes ... ok
[INFO] [stdout] test store::tests::put_prompt_blob_creates_type_index_even_without_prompts_dir ... ok
[INFO] [stdout] test store::tests::put_get_roundtrip ... ok
[INFO] [stdout] test store::tests::ref_delete_removes_ref ... ok
[INFO] [stdout] test store::tests::ref_write_read ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_full_hash_roundtrip ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_no_match_errors ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_non_hex_errors ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_too_short_errors ... ok
[INFO] [stdout] test store::tests::list_every_type_uses_index_not_get ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_short_prefix_matches ... ok
[INFO] [stdout] test store::tests::ref_read_raw_ref_write_raw_symbolic_head ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_matches_across_object_types ... ok
[INFO] [stdout] test store::tests::list_legacy_store_rebuilds_every_missing_type_index_in_one_walk ... ok
[INFO] [stdout] test store::tests::list_annotation_after_marker_does_not_deserialize_objects ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_does_not_iterate_object_types ... ok
[INFO] [stdout] test structured::tests::file_path_extraction ... ok
[INFO] [stdout] test structured::tests::extract_code_blocks_basic ... ok
[INFO] [stdout] test structured::tests::task_phase_create_code_detected ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_trims_whitespace ... ok
[INFO] [stdout] test store::tests::type_index_files_are_markers_for_new_types_full_content_for_legacy ... ok
[INFO] [stdout] test structured::tests::task_phase_fix_bug_detected ... ok
[INFO] [stdout] test structured::tests::task_phase_diagnose_detected ... ok
[INFO] [stdout] test structured::tests::task_scope_broad ... ok
[INFO] [stdout] test structured::tests::task_phase_verify_detected ... ok
[INFO] [stdout] test structured::tests::task_scope_single_file ... ok
[INFO] [stdout] test structured::tests::task_scope_single_function ... ok
[INFO] [stdout] test structured::tests::task_phase_modify_code_detected ... ok
[INFO] [stdout] test structured::tests::unified_diff_detection ... ok
[INFO] [stdout] test structured::tests::final_artifact_function_only_from_response ... ok
[INFO] [stdout] test structured::tests::task_goal_is_first_sentence ... ok
[INFO] [stdout] test structured::tests::task_scope_multi_file ... ok
[INFO] [stdout] test structured::tests::recent_trace_summaries_ordered_newest_first ... ok
[INFO] [stdout] test structured::tests::target_context_returns_function_slice_for_single_function_scope ... ok
[INFO] [stdout] test structured::tests::final_artifact_create_code_uses_edit_content ... ok
[INFO] [stdout] test structured::tests::pocket_tasks_full_workflow_all_three_phases ... ok
[INFO] [stdout] test reference::tests::sync_to_head_single_commit_path_creates_one_commit ... ok
[INFO] [stdout] test structured::tests::target_symbol_extracted_from_prompt_plus_source ... ok
[INFO] [stdout] test structured::tests::change_semantics_populated ... ok
[INFO] [stdout] test structured::tests::trace_summary_populated ... ok
[INFO] [stdout] test structured::tests::non_run_hash_errors_cleanly ... ok
[INFO] [stdout] test sync::tests::branch_upstream_round_trip ... ok
[INFO] [stdout] test structured::tests::verification_actions_found ... ok
[INFO] [stdout] test sync::tests::clone_repo_refuses_existing_non_empty_destination ... ok
[INFO] [stdout] test sync::tests::collect_reachable_from_commit ... ok
[INFO] [stdout] test sync::tests::clone_repo_sets_upstream_for_default_branch ... ok
[INFO] [stdout] test sync::tests::is_ancestor_linear ... ok
[INFO] [stdout] test sync::tests::open_remote_store_fails_on_invalid_path ... ok
[INFO] [stdout] test sync::tests::collect_reachable_stops_at_existing ... ok
[INFO] [stdout] test sync::tests::fetch_creates_remote_tracking_refs ... ok
[INFO] [stdout] test sync::tests::open_remote_store_works_on_valid_repo ... ok
[INFO] [stdout] test sync::tests::fetch_remote_uses_list_branches_not_refs_dir ... ok
[INFO] [stdout] test sync::tests::fetch_copies_only_missing_objects ... ok
[INFO] [stdout] test sync::tests::list_refs_shows_branches_and_tracking ... ok
[INFO] [stdout] test sync::tests::clone_repo_errors_when_requested_branch_missing ... ok
[INFO] [stdout] test sync::tests::clone_repo_into_empty_destination_creates_working_repo ... ok
[INFO] [stdout] test sync::tests::fetch_does_not_overwrite_local_branch ... ok
[INFO] [stdout] test sync::tests::pull_branch_already_up_to_date_returns_local_tip ... ok
[INFO] [stdout] test sync::tests::clone_repo_into_bare_creates_bare_layout_without_working_tree ... ok
[INFO] [stdout] test sync::tests::clone_repo_with_explicit_branch_checks_out_that_branch ... ok
[INFO] [stdout] test sync::tests::remote_config_preserves_repo_version ... ok
[INFO] [stdout] test sync::tests::remote_config_roundtrip ... ok
[INFO] [stdout] test sync::tests::read_remotes_empty_when_none_configured ... ok
[INFO] [stdout] test sync::tests::sync_includes_evidence_backed_commit ... ok
[INFO] [stdout] test sync::tests::verify_closure_fails_when_tip_missing ... ok
[INFO] [stdout] test sync::tests::push_to_empty_remote ... ok
[INFO] [stdout] test sync::tests::verify_closure_passes_when_all_objects_present ... ok
[INFO] [stdout] test tag::tests::create_and_list_tags ... ok
[INFO] [stdout] test tag::tests::delete_nonexistent_tag_fails ... ok
[INFO] [stdout] test tag::tests::delete_tag_removes_it ... ok
[INFO] [stdout] test tag::tests::create_duplicate_tag_fails ... ok
[INFO] [stdout] test tag::tests::list_tags_empty_repo ... ok
[INFO] [stdout] test tap::tests::diagnose_includes_prompt_lengths_and_model ... ok
[INFO] [stdout] test sync::tests::open_remote_store_dispatches_ssh_urls ... ok
[INFO] [stdout] test tap::tests::diagnose_empty_response ... ok
[INFO] [stdout] test sync::tests::pull_branch_still_fast_forwards_when_local_is_ancestor ... ok
[INFO] [stdout] test sync::tests::pull_fast_forwards ... ok
[INFO] [stdout] test tap::tests::diagnose_shallow_trace ... ok
[INFO] [stdout] test tap::tests::extract_task_fails_on_non_run ... ok
[INFO] [stdout] test sync::tests::pull_branch_returns_diverged_for_diverged_branches ... ok
[INFO] [stdout] test sync::tests::pull_diverged_fails ... ok
[INFO] [stdout] test tap::tests::group_empty_trace ... ok
[INFO] [stdout] test tap::tests::group_multi_step ... ok
[INFO] [stdout] test sync::tests::verify_closure_fails_when_dependency_missing ... ok
[INFO] [stdout] test sync::tests::push_already_up_to_date ... ok
[INFO] [stdout] test tap::tests::export_agentic_multi_step ... ok
[INFO] [stdout] test tap::tests::filter_runs_by_model ... ok
[INFO] [stdout] test tap::tests::extract_task_from_store ... ok
[INFO] [stdout] test sync::tests::pull_already_up_to_date ... ok
[INFO] [stdout] test tap::tests::export_context_includes_file_content ... ok
[INFO] [stdout] test tap::tests::group_user_assistant_aliases ... ok
[INFO] [stdout] test tap::tests::group_simple_prompt_response ... ok
[INFO] [stdout] test tap::tests::group_multiple_prompts_single_response ... ok
[INFO] [stdout] test tap::tests::export_prompt_only ... ok
[INFO] [stdout] test tap::tests::filter_runs_by_min_steps ... ok
[INFO] [stdout] test tap::tests::group_with_file_events ... ok
[INFO] [stdout] test tap::tests::group_with_tool_calls ... ok
[INFO] [stdout] test tap::tests::placeholder_response_detected ... ok
[INFO] [stdout] test tap::tests::normalize_kind_handles_aliases ... ok
[INFO] [stdout] test tap::tests::tool_result_pairs_with_last_unpaired ... ok
[INFO] [stdout] test text3way::tests::merge_text_no_conflict_returns_clean ... ok
[INFO] [stdout] test tap::tests::token_usage_extracted_from_run_parameters ... ok
[INFO] [stdout] test text3way::tests::merge_text_with_conflict_returns_markers ... ok
[INFO] [stdout] test text3way::tests::merge_text_identical_inputs_returns_unchanged ... ok
[INFO] [stdout] test tree::tests::build_tree_empty_index ... ok
[INFO] [stdout] test tree::tests::build_tree_single_file ... ok
[INFO] [stdout] test tree::tests::flatten_tree_roundtrip ... ok
[INFO] [stdout] test store::tests::resolve_hash_prefix_ambiguous_errors ... ok
[INFO] [stdout] test tree::tests::empty_tree_hash_deterministic ... ok
[INFO] [stdout] test tap::tests::trace_stats_detects_structured_events ... ok
[INFO] [stdout] test tap::tests::trace_stats_reports_event_details ... ok
[INFO] [stdout] test text3way::tests::merge_text_handles_missing_base_for_add_add ... ok
[INFO] [stdout] test store::tests::list_annotation_filters_to_annotations_only_after_rebuild ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_modified_text_conflict ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_added_diff_content_text_merges ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_modified_clean_text_merge ... ok
[INFO] [stdout] test tree::tests::restore_tree_writes_files ... ok
[INFO] [stdout] test tree::tests::build_tree_deeply_nested ... ok
[INFO] [stdout] test tap::tests::summarize_repo_counts ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_no_changes_returns_same_hash ... ok
[INFO] [stdout] test sync::tests::push_non_fast_forward_fails ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_one_side_modified_other_unchanged ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_one_side_added ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_added_diff_content_text_conflicts ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_one_side_deleted_other_unchanged ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_modify_delete_conflicts ... ok
[INFO] [stdout] test working::tests::add_and_materialize_binary_blob ... ok
[INFO] [stdout] test working::tests::activity_summary_counts_dirs ... ok
[INFO] [stdout] test working::tests::add_dot_stages_working_dir_only ... ok
[INFO] [stdout] test workdir::tests::working_tree_dirty_when_tracked_file_deleted ... ok
[INFO] [stdout] test tree::tests::build_tree_nested_dirs ... ok
[INFO] [stdout] test working::tests::add_dot_prunes_stale_ignored_index_entries ... ok
[INFO] [stdout] test workdir::tests::working_tree_clean_when_no_changes ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_modified_same_way ... ok
[INFO] [stdout] test working::tests::add_stages_working_dir_file ... ok
[INFO] [stdout] test working::tests::add_dot_excludes_git_dir ... ok
[INFO] [stdout] test working::tests::add_dot_updates_staging_index_for_all_files ... ok
[INFO] [stdout] test working::tests::add_respects_morphignore ... ok
[INFO] [stdout] test working::tests::add_stages_prompt_from_morph_prompts ... ok
[INFO] [stdout] test working::tests::blob_from_prompt_file_creates_blob ... ok
[INFO] [stdout] test working::tests::add_dot_excludes_morph_internals ... ok
[INFO] [stdout] test workdir::tests::working_tree_clean_when_only_untracked_added ... ok
[INFO] [stdout] test working::tests::add_subdirectory ... ok
[INFO] [stdout] test working::tests::add_stages_eval_from_morph_evals ... ok
[INFO] [stdout] test working::tests::status_excludes_morph_prompts ... ok
[INFO] [stdout] test working::tests::status_excludes_morph_evals ... ok
[INFO] [stdout] test working::tests::status_excludes_venv_by_default ... ok
[INFO] [stdout] test working::tests::status_excludes_node_modules_by_default ... ok
[INFO] [stdout] test workdir::tests::working_tree_dirty_when_file_modified ... ok
[INFO] [stdout] test working::tests::status_respects_gitignore ... ok
[INFO] [stdout] test working::tests::status_excludes_morph_internals ... ok
[INFO] [stdout] test working::tests::status_shows_working_dir_files ... ok
[INFO] [stdout] test working::tests::working_status_clean_after_commit ... ok
[INFO] [stdout] test working::tests::status_excludes_git_dir_by_default ... ok
[INFO] [stdout] test working::tests::status_excludes_morphignore_paths ... ok
[INFO] [stdout] test working::tests::materialize_roundtrip ... ok
[INFO] [stdout] test working::tests::working_status_shows_new_files_before_commit ... ok
[INFO] [stdout] test working::tests::add_updates_staging_index ... ok
[INFO] [stdout] test working::tests::status_after_add_shows_tracked ... ok
[INFO] [stdout] test working::tests::working_status_shows_deleted ... ok
[INFO] [stdout] test working::tests::working_status_shows_modified ... ok
[INFO] [stdout] test sync::tests::set_branch_upstream_preserves_remotes ... ok
[INFO] [stdout] test tree::tests::restore_tree_filtered_skips_ignored_entries ... ok
[INFO] [stdout] test sync::tests::push_preserves_object_hashes ... ok
[INFO] [stdout] test treemerge::tests::merge_trees_both_sides_added_same_content ... ok
[INFO] [stdout] test reference::tests::sync_to_head_mirrors_every_commit_back_to_last_mirrored_ancestor ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 659 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.51s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/morph_e2e-9328f0f50137db11)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cucumber.rs (/opt/rustwide/target/debug/deps/cucumber-3604dfd14e84c613)
[INFO] [stdout] Feature: Add and commit
[INFO] [stdout]   Scenario: First commit with pipeline and eval suite
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/app.rs" with content "fn main() {}"
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  When I run "morph add src/app.rs"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run commit with message "first commit" using captured pipeline and eval suite
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph log HEAD"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then the path ".morph/refs/heads/main" is present
[INFO] [stdout]    ✔  And the path ".morph/index.json" does not exist
[INFO] [stdout] Feature: Behavioral merge workflow (Phase 4)
[INFO] [stdout]   Scenario: User previews and executes a successful merge
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  Given a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "main-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.9}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "feature-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.85}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph merge-plan feature"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "Merge plan"
[INFO] [stdout]    ✔  And stdout contains "Reference bar"
[INFO] [stdout]    ✔  And stdout contains "acc"
[INFO] [stdout]    ✔  When I merge "feature" with message "merged" pipeline "<prog_hash>" and metrics {"acc": 0.92}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph log"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "merged"
[INFO] [stdout]   Scenario: Merge is rejected with a clear explanation
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  Given a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "main-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.9}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "feature-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.85}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I merge "feature" with message "bad-merge" pipeline "<prog_hash>" and metrics {"acc": 0.87}
[INFO] [stdout]    ✔  Then the last command failed
[INFO] [stdout]    ✔  And stderr contains "rejected"
[INFO] [stdout]    ✔  And stderr contains "acc"
[INFO] [stdout]   Scenario: Merge with metric retirement
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And an eval suite with acc and old_metric
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  Given a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "main-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.9, "old_metric": 0.8}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "feature-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.85, "old_metric": 0.7}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph merge-plan feature"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "old_metric"
[INFO] [stdout]    ✔  When I merge "feature" with message "retired-merge" pipeline "<prog_hash>" metrics {"acc": 0.92} and retire "old_metric"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph log"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "retired-merge"
[INFO] [stdout] Feature: Branch and checkout workflow
[INFO] [stdout]   Scenario: Create branch, commit on it, switch back to main
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "main_file.txt" with content "on main"
[INFO] [stdout]    ✔  When I run "morph add main_file.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m initial"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "Switched to branch feature"
[INFO] [stdout]    ✔  Given a file "feature_file.txt" with content "on feature"
[INFO] [stdout]    ✔  When I run "morph add feature_file.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m feature-work"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "Switched to branch main"
[INFO] [stdout]    ✔  And the file "main_file.txt" has content "on main"
[INFO] [stdout]    ✔  And the path "feature_file.txt" does not exist
[INFO] [stdout]   Scenario: Checkout restores working tree from commit
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m main-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m feature-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then the path "a.txt" is present
[INFO] [stdout]    ✔  And the path "b.txt" does not exist
[INFO] [stdout] Feature: Concurrent agents
[INFO] [stdout]   Scenario: Two agents record sessions in the same repo at the same time
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When 2 agents run record-session concurrently
[INFO] [stdout]    ✔  Then all agents succeeded
[INFO] [stdout]    ✔  And the repo has exactly 2 run records
[INFO] [stdout] Feature: Evidence-backed commits (Phase 2)
[INFO] [stdout]   Scenario: Session to evidence-backed commit
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/app.rs" with content "fn main() {}"
[INFO] [stdout]    ✔  When I run record-session with prompt "fix the bug" and response "done fixing"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "run_hash"
[INFO] [stdout]    ✔  When I run "morph add src/app.rs"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with from-run "<run_hash>" and message "evidence-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I run "morph show <commit_hash>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "evidence_refs"
[INFO] [stdout]    ✔  And stdout contains "env_constraints"
[INFO] [stdout]    ✔  And stdout contains "contributors"
[INFO] [stdout]    ✔  And stdout contains "<run_hash>"
[INFO] [stdout]   Scenario: Multi-contributor run to commit
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/app.rs" with content "fn main() {}"
[INFO] [stdout]    ✔  When I run record-session with prompt "build feature" and response "feature built"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "run_hash"
[INFO] [stdout]    ✔  When I run "morph add src/app.rs"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with from-run "<run_hash>" and message "multi-contributor-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I run "morph show <commit_hash>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "contributors"
[INFO] [stdout]    ✔  And stdout contains "primary"
[INFO] [stdout]    ✔  And stdout contains "evidence_refs"
[INFO] [stdout]    ✔  And stdout contains "<run_hash>"
[INFO] [stdout] Feature: IDE hook scripts record sessions to morph store
[INFO] [stdout]   Scenario: Claude Code prompt hook appends to pending JSONL
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "claude-code/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]    ✔  And the path ".morph/hooks/pending-sess-abc123.jsonl" is present
[INFO] [stdout]    ✔  And the file ".morph/hooks/pending-sess-abc123.jsonl" contains "hello world"
[INFO] [stdout]   Scenario: Claude Code prompt hook handles empty stdin gracefully
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "claude-code/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]   Scenario: Claude Code stop hook creates run and trace in store
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "claude-code/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  And I pipe into hook "claude-code/hooks/morph-record-stop.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]    ✔  And the path ".morph/runs" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/traces" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/hooks/pending-sess-full01.jsonl" does not exist
[INFO] [stdout]   Scenario: Cursor prompt hook appends to pending JSONL
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "morph-cli/assets/cursor/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]    ✔  And the path ".morph/hooks/pending-conv-xyz789.jsonl" is present
[INFO] [stdout]    ✔  And the file ".morph/hooks/pending-conv-xyz789.jsonl" contains "fix bug"
[INFO] [stdout]   Scenario: Cursor response hook creates run and trace in store
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "morph-cli/assets/cursor/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  And I pipe into hook "morph-cli/assets/cursor/hooks/morph-record-response.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]    ✔  And the path ".morph/runs" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/traces" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/hooks/pending-conv-resp01.jsonl" does not exist
[INFO] [stdout]   Scenario: Cursor stop hook creates run and trace in store
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I pipe into hook "morph-cli/assets/cursor/hooks/morph-record-prompt.sh" the JSON:
[INFO] [stdout]    ✔  And I pipe into hook "morph-cli/assets/cursor/hooks/morph-record-stop.sh" the JSON:
[INFO] [stdout]    ✔  Then the hook exited successfully
[INFO] [stdout]    ✔  And the path ".morph/runs" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/traces" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/hooks/pending-conv-stop01.jsonl" does not exist
[INFO] [stdout] Feature: Hosted inspection workflow
[INFO] [stdout]   Scenario: Team inspects a certified commit through the hosted service
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/main.py" with content "print('hello')"
[INFO] [stdout]    ✔  When I run "morph add ."
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ?  When I run "morph commit -m initial --metrics {\"acc\":0.95,\"f1\":0.88} --json"
[INFO] [stdout]       Step skipped: features/hosted_inspection_workflow.feature:11:5
[INFO] [stdout]   Scenario: Team inspects merge status through the hosted service
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  And a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add ."
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ?  When I run "morph commit -m main-commit --pipeline <prog_hash> --metrics {\"acc\":0.8}"
[INFO] [stdout]       Step skipped: features/hosted_inspection_workflow.feature:34:5
[INFO] [stdout]   Scenario: Team inspects extracted pipeline and source run
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "code.py" with content "print('hi')"
[INFO] [stdout]    ✔  When I run "morph add ."
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run record-session with prompt "Build feature X" and response "Feature X built"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I capture the last output as "run_hash"
[INFO] [stdout]    ✔  When I run "morph pipeline extract --from-run <run_hash>"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I capture the last output as "pipeline_hash"
[INFO] [stdout]    ✔  When I run "morph commit -m snap"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I start the morph server on port "19873"
[INFO] [stdout]    ✔  And I query the server at "/api/repos/default/runs/<run_hash>"
[INFO] [stdout]    ✔  Then the JSON response field "agent.id" is present
[INFO] [stdout]    ✔  And the JSON response field "trace" is present
[INFO] [stdout]    ✔  When I query the server at "/api/repos/default/pipelines/<pipeline_hash>"
[INFO] [stdout]    ✔  Then the JSON response field "provenance.method" equals "extracted"
[INFO] [stdout]    ✔  And the JSON response field "provenance.derived_from_run" equals "<run_hash>"
[INFO] [stdout]    ✔  And the JSON response field "node_count" equals "2"
[INFO] [stdout]    ✔  And I stop the morph server
[INFO] [stdout]   Scenario: Invalid repo or missing object returns clear service error
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I start the morph server on port "19874"
[INFO] [stdout]    ✔  And I query the server at "/api/repos/default/commits/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
[INFO] [stdout]    ✔  Then the JSON response code is "404"
[INFO] [stdout]    ✔  And the JSON response field "code" equals "not_found"
[INFO] [stdout]    ✔  When I query the server at "/api/repos/nonexistent/summary"
[INFO] [stdout]    ✔  Then the JSON response code is "404"
[INFO] [stdout]    ✔  And the JSON response field "code" equals "repo_not_found"
[INFO] [stdout]    ✔  When I query the server at "/api/repos/default/commits/not-a-hash"
[INFO] [stdout]    ✔  Then the JSON response code is "400"
[INFO] [stdout]    ✔  And the JSON response field "code" equals "bad_hash"
[INFO] [stdout]    ✔  And I stop the morph server
[INFO] [stdout] Feature: Morph init and status
[INFO] [stdout]   Scenario: Status shows new file after init
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "hello.txt" with content "world"
[INFO] [stdout]    ✔  When I run "morph status"
[INFO] [stdout]    ✔  Then stdout contains "hello.txt"
[INFO] [stdout]    ✔  And stdout contains "new file"
[INFO] [stdout]    ✔  And the path ".morph" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/objects" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/refs/heads" exists as a directory
[INFO] [stdout]   Scenario: Empty repo has no files to track
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I run "morph status"
[INFO] [stdout]    ✔  Then stdout contains "nothing to commit"
[INFO] [stdout] Feature: Merge with behavioral dominance
[INFO] [stdout]   Scenario: Successful merge when metrics dominate both parents
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  Given a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "main-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.9}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "feature-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.85}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I merge "feature" with message "merged" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.92}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph log"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "merged"
[INFO] [stdout]   Scenario: Merge rejected when metrics regress
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And the identity pipeline and a minimal eval suite exist
[INFO] [stdout]    ✔  When I run "morph pipeline create prog.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "prog_hash"
[INFO] [stdout]    ✔  When I run "morph add .morph/evals/e.json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "suite_hash"
[INFO] [stdout]    ✔  Given a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "main-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.9}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with message "feature-commit" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.85}
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I merge "feature" with message "bad-merge" pipeline "<prog_hash>" suite "<suite_hash>" and metrics {"acc": 0.87}
[INFO] [stdout]    ✔  Then the last command failed
[INFO] [stdout]    ✔  And stderr contains "rejected"
[INFO] [stdout] Feature: Prompt create and materialize
[INFO] [stdout]   Scenario: Create prompt from file and materialize to output
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file ".morph/prompts/hello.txt" with content "Hello world"
[INFO] [stdout]    ✔  When I run "morph prompt create .morph/prompts/hello.txt"
[INFO] [stdout]    ✔  And I capture the last output as "prompt_hash"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph prompt materialize <prompt_hash> --output .morph/prompts/out.prompt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "Materialized"
[INFO] [stdout]    ✔  And the file ".morph/prompts/out.prompt" has content "Hello world"
[INFO] [stdout] Feature: Remote sync workflow (Phase 5)
[INFO] [stdout]   Scenario: Two repos synchronize through a named remote
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  Given a second morph repo at "remote"
[INFO] [stdout]    ✔  And a file "hello.txt" with content "hello world"
[INFO] [stdout]    ✔  When I run "morph add hello.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m first-commit --json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I run "morph remote add origin <remote>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph push origin main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "Pushed"
[INFO] [stdout]    ✔  When I run "morph log" in directory "remote"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "first-commit"
[INFO] [stdout]   Scenario: Fast-forward pull updates local state
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  Given a second morph repo at "remote"
[INFO] [stdout]    ✔  And a file "data.txt" in directory "remote" with content "remote data"
[INFO] [stdout]    ✔  When I run "morph add data.txt" in directory "remote"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m remote-commit" in directory "remote"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph remote add origin <remote>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph pull origin main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "Updated"
[INFO] [stdout]    ✔  When I run "morph log"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "remote-commit"
[INFO] [stdout]   Scenario: Non-fast-forward push is rejected
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  Given a second morph repo at "remote"
[INFO] [stdout]    ✔  And a file "local.txt" with content "local content"
[INFO] [stdout]    ✔  When I run "morph add local.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m local-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ?  And a file "remote.txt" in directory "remote" with content "remote content"
[INFO] [stdout]       Step skipped: features/remote_sync_workflow.feature:46:5
[INFO] [stdout]   Scenario: Evidence-backed history survives sync
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  Given a second morph repo at "remote"
[INFO] [stdout]    ✔  And a file "code.txt" with content "fn main() {}"
[INFO] [stdout]    ✔  When I run record-session with prompt "fix the bug" and response "done fixing"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "run_hash"
[INFO] [stdout]    ✔  When I run "morph add code.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I commit with from-run "<run_hash>" and message "evidence-commit"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I run "morph remote add origin <remote>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph push origin main"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph show <commit_hash>" in directory "remote"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "evidence_refs"
[INFO] [stdout]    ✔  And stdout contains "<run_hash>"
[INFO] [stdout] Feature: Rollup squashes commits
[INFO] [stdout]   Scenario: Rollup three commits into one
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "a.txt" with content "aaa"
[INFO] [stdout]    ✔  When I run "morph add a.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m first --json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "base_hash"
[INFO] [stdout]    ✔  Given a file "b.txt" with content "bbb"
[INFO] [stdout]    ✔  When I run "morph add b.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m second"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Given a file "c.txt" with content "ccc"
[INFO] [stdout]    ✔  When I run "morph add c.txt"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m third"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph rollup <base_hash> HEAD -m squashed"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph log"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "squashed"
[INFO] [stdout] Feature: Run record-session (single agent)
[INFO] [stdout]   Scenario: One agent records a session
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I run record-session with prompt "user request" and response "agent reply"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then the path ".morph/objects" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/runs" exists as a directory
[INFO] [stdout]    ✔  And the path ".morph/traces" exists as a directory
[INFO] [stdout] Feature: Run to Pipeline extraction (Phase 3)
[INFO] [stdout]   Scenario: Session to inspectable reusable pipeline
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/app.rs" with content "fn main() {}"
[INFO] [stdout]    ✔  When I run record-session with prompt "fix the bug" and response "done fixing"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "run_hash"
[INFO] [stdout]    ✔  When I run "morph pipeline extract --from-run <run_hash>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "pipeline_hash"
[INFO] [stdout]    ✔  When I run "morph pipeline show <pipeline_hash>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "prompt_call"
[INFO] [stdout]    ✔  And stdout contains "review"
[INFO] [stdout]    ✔  And stdout contains "derived_from_run"
[INFO] [stdout]    ✔  And stdout contains "derived_from_trace"
[INFO] [stdout]    ✔  And stdout contains "derived_from_event"
[INFO] [stdout]    ✔  And stdout contains "extracted"
[INFO] [stdout]    ✔  And stdout contains "generate"
[INFO] [stdout]    ✔  And stdout contains "<run_hash>"
[INFO] [stdout]    ✔  When I run "morph add src/app.rs"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m pipeline-commit --pipeline <pipeline_hash> --json"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  And I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I run "morph show <commit_hash>"
[INFO] [stdout]    ✔  And the last command succeeded
[INFO] [stdout]    ✔  Then stdout contains "<pipeline_hash>"
[INFO] [stdout]   Scenario: Extraction fails clearly for missing Run
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  When I run "morph pipeline extract --from-run aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
[INFO] [stdout]    ✔  Then the last command failed
[INFO] [stdout] Feature: Spec-first eval-driven workflow (Phase 6c)
[INFO] [stdout]   Scenario: Spec → register → implement → commit → zero gaps
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "specs/login.yaml" with content "[{name: alpha}]"
[INFO] [stdout]    ✔  When I run "morph eval add specs/login.yaml"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph eval show"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "alpha"
[INFO] [stdout]    ✔  Given a file "src/feature.rs" with content "pub fn alpha() -> bool { true }"
[INFO] [stdout]    ✔  When I run "morph add ."
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I commit message "spec-first-impl" with metrics "tests_total=1,tests_passed=1" and new-cases "login:alpha"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph eval gaps"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "No behavioral evidence gaps"
[INFO] [stdout]   Scenario: Merge plan surfaces case provenance from --new-cases
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "base.txt" with content "v0"
[INFO] [stdout]    ✔  When I run "morph add base.txt"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I commit message "base" with metrics "tests_total=1,tests_passed=1" and new-cases "shared"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph branch feature"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  Given a file "main_only.txt" with content "main"
[INFO] [stdout]    ✔  When I run "morph add main_only.txt"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I commit message "main-work" with metrics "tests_total=1,tests_passed=1" and new-cases "alpha,beta"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  Given a file "feature_only.txt" with content "feature"
[INFO] [stdout]    ✔  When I run "morph add feature_only.txt"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I commit message "feature-work" with metrics "tests_total=1,tests_passed=1" and new-cases "gamma"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout main"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph merge-plan feature"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "Case provenance:"
[INFO] [stdout]    ✔  And stdout contains "main introduces 2 case(s): alpha, beta"
[INFO] [stdout]    ✔  And stdout contains "feature introduces 1 case(s): gamma"
[INFO] [stdout]    ✔  And stdout contains "Merged candidate must pass all 3"
[INFO] [stdout] Feature: Team CI workflow (Phase 6)
[INFO] [stdout]   Scenario: Developer branch is certified in CI
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "code.txt" with content "fn main() {}"
[INFO] [stdout]    ✔  When I run "morph add code.txt"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m initial-commit --json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I capture the last output as "commit_hash"
[INFO] [stdout]    ✔  When I create a JSON file "metrics.json" with metrics "tests_passed=42,tests_total=42,pass_rate=1.0"
[INFO] [stdout]    ✔  When I run "morph certify --metrics-file metrics.json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "PASS"
[INFO] [stdout]    ✔  When I run "morph gate"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "PASS"
[INFO] [stdout]   Scenario: Candidate is blocked by policy
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "code.txt" with content "fn main() {}"
[INFO] [stdout]    ✔  When I create a policy file "policy.json" with required "tests_passed,coverage_pct" and thresholds "tests_passed=1.0,coverage_pct=0.8"
[INFO] [stdout]    ✔  When I run "morph policy set policy.json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph add code.txt"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m candidate-commit --allow-empty-metrics"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I create a JSON file "metrics.json" with metrics "tests_passed=42"
[INFO] [stdout]    ✔  When I run "morph certify --metrics-file metrics.json"
[INFO] [stdout]    ✔  Then the last command failed
[INFO] [stdout]    ✔  And stderr contains "FAIL"
[INFO] [stdout]    ✔  And stderr contains "coverage_pct"
[INFO] [stdout]    ✔  When I run "morph gate"
[INFO] [stdout]    ✔  Then the last command failed
[INFO] [stdout]    ✔  And stderr contains "FAIL"
[INFO] [stdout]   Scenario: Git-style collaboration workflow with Morph sidecar
[INFO] [stdout]    ✔  Given a morph repo
[INFO] [stdout]    ✔  And a file "src/lib.rs" with content "pub fn add(a: i32, b: i32) -> i32 { a + b }"
[INFO] [stdout]    ✔  When I run "morph add src/lib.rs"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m main-baseline --json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I capture the last output as "main_commit"
[INFO] [stdout]    ✔  When I run "morph branch feature-auth"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph checkout feature-auth"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  Given a file "src/auth.rs" with content "pub fn login() -> bool { true }"
[INFO] [stdout]    ✔  When I run "morph add src/auth.rs"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I run "morph commit -m add-auth-module --json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  When I capture the last output as "feature_commit"
[INFO] [stdout]    ✔  When I create a JSON file "ci-metrics.json" with metrics "tests_passed=10,tests_total=10"
[INFO] [stdout]    ✔  When I run "morph certify --metrics-file ci-metrics.json --runner github-actions"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "PASS"
[INFO] [stdout]    ✔  When I run "morph gate"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "PASS"
[INFO] [stdout]    ✔  When I run "morph gate --json"
[INFO] [stdout]    ✔  Then the last command succeeded
[INFO] [stdout]    ✔  And stdout contains "passed"
[INFO] [stdout]    ✔  And stdout contains "true"
[INFO] [stdout] [Summary]
[INFO] [stdout] 16 features
[INFO] [stdout] 37 scenarios (34 passed, 3 skipped)
[INFO] [stdout] 560 steps (557 passed, 3 skipped)
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/morph_mcp-e641cb390c1f54a3)
[INFO] [stdout] 
[INFO] [stdout] running 31 tests
[INFO] [stdout] test tests::init_creates_morph_dir ... ok
[INFO] [stdout] test tests::eval_suite_show_lists_cases ... ok
[INFO] [stdout] test tests::add_eval_case_creates_default_suite ... ok
[INFO] [stdout] test tests::init_already_initialized_fails ... ok
[INFO] [stdout] test tests::branch_without_commit_fails ... ok
[INFO] [stdout] test tests::eval_from_output_returns_metrics_json ... ok
[INFO] [stdout] test tests::log_shows_commits ... ok
[INFO] [stdout] test tests::read_only_inspection_handlers_return_documented_shapes ... ok
[INFO] [stdout] test tests::repo_store_accepts_latest_store_version_after_upgrade ... ok
[INFO] [stdout] test tests::eval_run_executes_command_and_records_run ... ok
[INFO] [stdout] test tests::record_session_with_messages ... ok
[INFO] [stdout] test tests::annotate_creates_annotation ... ok
[INFO] [stdout] test tests::commit_with_metrics ... ok
[INFO] [stdout] test tests::eval_suite_from_specs_replaces_default ... ok
[INFO] [stdout] test tests::record_session_returns_confirmation ... ok
[INFO] [stdout] test tests::branch_and_checkout ... ok
[INFO] [stdout] test tests::record_eval_from_file ... ok
[INFO] [stdout] test tests::eval_from_output_record_links_run_to_head ... ok
[INFO] [stdout] test tests::diff_between_commits ... ok
[INFO] [stdout] test tests::eval_gaps_returns_structured_list ... ok
[INFO] [stdout] test tests::stage_default_paths ... ok
[INFO] [stdout] test tests::commit_with_from_run_provenance ... ok
[INFO] [stdout] test tests::repo_store_not_found_gives_clear_error ... ok
[INFO] [stdout] test tests::stage_and_commit_workflow ... ok
[INFO] [stdout] test tests::reference_sync_without_git_errors ... ok
[INFO] [stdout] test tests::status_shows_files ... ok
[INFO] [stdout] test tests::repo_store_still_accepts_legacy_version_0_4 ... ok
[INFO] [stdout] test tests::show_returns_json ... ok
[INFO] [stdout] test tests::status_includes_evidence_block_with_suite_and_runs ... ok
[INFO] [stdout] test tests::structured_mcp_tools_end_to_end ... ok
[INFO] [stdout] test tests::merge_with_retire_reason_synthesizes_attributed_review_node ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 31 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/morph_serve-7a493043fc608b09)
[INFO] [stdout] 
[INFO] [stdout] running 37 tests
[INFO] [stdout] test org_policy::tests::load_missing_returns_none ... ok
[INFO] [stdout] test org_policy::tests::effective_thresholds_repo_overrides ... ok
[INFO] [stdout] test org_policy::tests::effective_metrics_union ... ok
[INFO] [stdout] test org_policy::tests::roundtrip_org_policy ... ok
[INFO] [stdout] test tests::test_commit_detail_bad_hash ... ok
[INFO] [stdout] test tests::test_commit_detail_not_found ... ok
[INFO] [stdout] test tests::service_run_trace_pipeline_views ... ok
[INFO] [stdout] test tests::test_compat_graph_with_runs ... ok
[INFO] [stdout] test tests::test_commit_list ... ok
[INFO] [stdout] test tests::test_compat_graph_empty ... ok
[INFO] [stdout] test tests::service_commit_detail_with_evidence ... ok
[INFO] [stdout] test tests::test_annotations ... ok
[INFO] [stdout] test tests::test_branch_list ... ok
[INFO] [stdout] test tests::test_compat_graph ... ok
[INFO] [stdout] test tests::test_compat_object ... ok
[INFO] [stdout] test tests::service_missing_object_error ... ok
[INFO] [stdout] test tests::test_graph_page_has_layout_fixes ... ok
[INFO] [stdout] test tests::test_compat_log ... ok
[INFO] [stdout] test tests::test_index_html ... ok
[INFO] [stdout] test tests::test_org_policy_get_set ... ok
[INFO] [stdout] test tests::test_commit_detail ... ok
[INFO] [stdout] test tests::test_gate_status ... ok
[INFO] [stdout] test tests::test_policy_with_org ... ok
[INFO] [stdout] test tests::test_raw_object ... ok
[INFO] [stdout] test tests::test_pipeline_detail ... ok
[INFO] [stdout] test tests::test_policy_default ... ok
[INFO] [stdout] test tests::test_repo_list ... ok
[INFO] [stdout] test tests::test_multi_repo ... ok
[INFO] [stdout] test tests::test_run_list_and_detail ... ok
[INFO] [stdout] test tests::test_repo_summary_not_found ... ok
[INFO] [stdout] test tests::test_trace_detail ... ok
[INFO] [stdout] test tests::service_invalid_hash_error ... ok
[INFO] [stdout] test tests::service_policy_view ... ok
[INFO] [stdout] test tests::test_compat_runs ... ok
[INFO] [stdout] test tests::service_repo_summary_empty ... ok
[INFO] [stdout] test tests::test_behavioral_status_certified ... ok
[INFO] [stdout] test tests::test_repo_summary ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests morph_core
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests morph_e2e
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests morph_serve
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "81b2bde240f0f11a5484ffd5bf7b2f3ef3769deb3132feb0085d3c41b32664a7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "81b2bde240f0f11a5484ffd5bf7b2f3ef3769deb3132feb0085d3c41b32664a7", kill_on_drop: false }`
[INFO] [stdout] 81b2bde240f0f11a5484ffd5bf7b2f3ef3769deb3132feb0085d3c41b32664a7
